сортировка в монго дБ как по родительским, так и по дочерним полям коллекции - PullRequest
1 голос
/ 22 сентября 2011

Хорошо, у меня есть две коллекции: Родитель и Ребенок. В родительской коллекции может быть несколько дочерних документов.

Теперь я хотел бы иметь возможность сортировать документы ChildCollection по его собственным полям, а также по полям его родителя. Это возможно? Да, я мог бы поместить это в одну большую коллекцию, но это будет много увольнений. Это будет сделано для миллионов записей, поэтому чем больше вы сможете сделать на сервере, тем лучше.

ParentCollection
_id : "parentid1"
field1 : "val1"
field2 : "val2"
fieldx.......

ChildCollection
_id : "childid1"
_parentid: "parentid1"
field1 : "val3"
field2 : "val4"
fieldx.........

Ответы [ 2 ]

2 голосов
/ 22 сентября 2011

Чтобы отсортировать дочернюю коллекцию по родительским полям коллекции, вы должны поместить родительские поля, по которым вы хотите сортировать, в каждый дочерний элемент.Нет другого способа сделать это.И вам нужно будет обновить эти поля во всех дочерних элементах при обновлении родительского документа.Mongodb любит денормализацию, так что пофиг на это.Также для увеличения скорости обновления родительских полей вы можете сделать дочерние обновления асинхронными.

0 голосов
/ 11 апреля 2017

Существует обходной путь.

С помощью $sort я смог отсортировать дочернюю коллекцию.Я вернул тот же код в Java List и реализовал сортировку родительской коллекции, используя Collections.sort(List<T>); и VOILA!

...