Форум сайта python.su
Вот понадобилось по сортировать по нескольким полям. Но не один за другим а немного в древовидном порядке что ли.
Есть документы:
{"_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
db.doc.fund().sort([('parent', -1), ('num', -1)])
3,4->1->2->5
Офлайн
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': '_'}
Офлайн
Хорошее решение но если база большая оно не совсем подходит потому что это все будет грузится в память. И поэтому хотелось бы сделать все это с помощью средств базы.
Офлайн