Найти - Пользователи
Полная версия: mongodb и продвинутая сортировка.
Начало » Базы данных » mongodb и продвинутая сортировка.
1
alexandre1
Вот понадобилось по сортировать по нескольким полям. Но не один за другим а немного в древовидном порядке что ли.
Есть документы:
{"_id":"1", "num":"111", "parent":"_", "child":["3", "4"]}
{"_id":"2", "num":"222", "parent":"_", "child":"_"}
{"_id":"3", "num":"333", "parent":"1", "child":"_"}
{"_id":"4", "num":"444", "parent":"1", "child":"_"}
{"_id":"5", "num":"555", "parent":"_", "child":"_"}
Нужно чтоб они ишли в таком порядке:
1->3,4->2->5
То есть, сразу за любым документом должны идти те которые указаны у него в “child”.
Сам код сортировки выглядит примерно так:
db.doc.fund().sort([('parent', -1), ('num', -1)])
Сейчас получается такая последовательность:
3,4->1->2->5
То есть он группирует по parent но только в перед num или после него, может кто то сталкивался с чем то подобным?
FishHook
docums=[
    {"_id":"4", "num":"444", "parent":"1", "child":"_"},
    {"_id":"1", "num":"111", "parent":"_", "child":["3", "4"]},
    {"_id":"3", "num":"333", "parent":"1", "child":"_"},
    {"_id":"5", "num":"555", "parent":"_", "child":"_"},
    {"_id":"6", "num":"555", "parent":"2", "child":"_"},
    {"_id":"2", "num":"222", "parent":"_", "child":["6"]},
    ]
for d in docums:
  try:
    int(d['parent'])
  except ValueError:
    d['parent']='0'
    
docums.sort(key=lambda x: int(x['_id']))
docums.sort(key=lambda x: int(x['parent'])  or int(x['_id']))     
     
for x in docums:
  print x
{'_id': '1', 'num': '111', 'parent': '0', 'child': ['3', '4']}
{'_id': '3', 'num': '333', 'parent': '1', 'child': '_'}
{'_id': '4', 'num': '444', 'parent': '1', 'child': '_'}
{'_id': '2', 'num': '222', 'parent': '0', 'child': ['6']}
{'_id': '6', 'num': '555', 'parent': '2', 'child': '_'}
{'_id': '5', 'num': '555', 'parent': '0', 'child': '_'}
alexandre1
Хорошее решение но если база большая оно не совсем подходит потому что это все будет грузится в память. И поэтому хотелось бы сделать все это с помощью средств базы.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB