#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})