Сортировка MongoDB по списку объектов

#database #mongodb #mongodb-query #nosql

Вопрос:

У меня есть несколько фиктивных данных в моей базе данных. Я пытаюсь выполнить функции агрегации mongodb для сортировки на основе заданного заголовка

 { "_id" : 1, "item" : "ABC1", "fields" : [ { "title" : "firstName", "value" : "Trish" }, { "title" : "zipcode", "value" : "01001" } ] }
{ "_id" : 2, "item" : "ABC2", "fields" : [ { "title" : "firstName", "value" : "Peter" }, { "title" : "zipcode", "value" : "00011" } ] }
 

Запрос, который я смог придумать до сих пор, заключается в следующем, и вот что возвращает mongodb.

db.test.aggregate([ {$раскрутка: «$поля»}, {$соответствие: {«поля.название» : «Имя»}}, {$сортировка: {«поля.значение» : 1} }])

 { "_id" : 2, "item" : "ABC2", "fields" : { "title" : "firstName", "value" : "Peter" } }
{ "_id" : 1, "item" : "ABC1", "fields" : { "title" : "firstName", "value" : "Trish" } }
 

Однако в результате я бы вернул набор данных, который должен включать другой объект в список полей, например. Главное, что я пытаюсь сделать, — это иметь возможность сортировать документы на основе определенного заголовка поля

 { "_id" : 2, "item" : "ABC2", "fields" : [ { "title" : "firstName", "value" : "Peter" }, { "title" : "zipcode", "value" : "00011" } ] }
{ "_id" : 1, "item" : "ABC1", "fields" : [ { "title" : "firstName", "value" : "Trish" }, { "title" : "zipcode", "value" : "01001" } ] }
 

Комментарии:

1. дайте мне знать , вы хотите отсортировать документы в соответствии с конкретным значением fields.title ? например, сортировать firstName ?

2. да, я хочу сортировать на основе названия, чтобы определить, в каком порядке я хочу, чтобы _id вышел, но все равно хочу включить все другие вложенные документы в свойство поля

Ответ №1:

Если вы можете гарантировать расположение полей, имя всегда будет первым и так далее. Вы можете сортировать по этому. подобный этому:

 db.test.find().sort({'fields.0.value': -1})
//or
db.test.find().sort({'fields.0.value': 1})