Когда я пишу, как этотMongoDB выбрать элемент из массива, сгруппировать их и подсчитать общее
db.Profiles.find({ userId:4790, "p2l.listId":31618 }, { "p2l.$": 1 })
я получить желаемый результат
...
{
"_id" : ObjectId("56052d35df3e5e564f770ed0"),
"p2l" : [
{
"listId" : 31618,
"status" : 131
}
] }
{
"_id" : ObjectId("56052d25df3e5e564f770ecd"),
"p2l" : [
{
"listId" : 31618,
"status" : 25
}
] }
{
"_id" : ObjectId("56052d1adf3e5e564f770eca"),
"p2l" : [
{
"listId" : 31618,
"status" : 25
}
] }
{
"_id" : ObjectId("5603c882bd1f3d3668ba7352"),
"p2l" : [
{
"listId" : 31618,
"status" : 24
}
] }
, но я должен сгруппировать его по статусу
Как я могу это сделать?
Я стараюсь, как
db.Profiles.aggregate({$match:{ userId:4790, "p2l.listId":31618}},
{$project:{"p2l.listId":"$p2l.listId", "p2l.status":"$p2l.status"}})
но в rezult, у меня есть ценности, которые не соответствуют параметрам запроса. В результате, там listId = 31617
{
"result" : [
...
{
"_id" : ObjectId("56052d25df3e5e564f770ecd"),
"p2l" : [
{
"listId" : [
31618
],
"status" : [
25
]
}
]
},
{
"_id" : ObjectId("56052d1adf3e5e564f770eca"),
"p2l" : [
{
"listId" : [
31618,
31617
],
"status" : [
25,
25
]
},
{
"listId" : [
31618,
31617
],
"status" : [
25,
25
]
}
]
},
{
"_id" : ObjectId("5603c882bd1f3d3668ba7352"),
"p2l" : [
{
"listId" : [
31618
],
"status" : [
24
]
}
]
}
],
"ok" : 1.0000000000000000,
"$gleStats" : {
"lastOpTime" : Timestamp(0, 0),
"electionId" : ObjectId("5606384b5e0803423d340427")
}
}
возможно дубликат [Получить только запрашиваемый элемент в массив объектов в коллекции MongoDB] (HTTP://stackoverflow.com/questions/3985214/retrieve-only-the-queried-element-in-an-object-array-in-mongodb-collection). Это означает, что различные примеры, показывающие '$ unwind' и как вам нужно« фильтровать »результаты« после »' $ unind', завершены, чтобы уменьшить соответствие массива. Пожалуйста, прекратите редактирование и начните читать то, что вы должны были найти в результатах поиска, в первую очередь. –
Спасибо за ваш комментарий, помогли мне. –
Он также должен помочь вам с этим большим знаменем, который вы должны увидеть сейчас, когда есть «большая синяя кнопка», в которой говорится: «Это помогло мне» (sic). Поэтому, пожалуйста, «нажмите» и закройте это как дубликат, как предполагалось. StackOverflow - это ресурс «Вопрос и ответ», который не нуждается в «двух тысячах» ответах, которые по сути являются одним и тем же. Закройте вопрос, и ссылка останется неповрежденной как для тех, кто может искать ваши условия. –