У меня есть коллекция MongoDB со структурой типа, что:MongoDB агрегат - фильтр поддокументе
[
{
name: "name1",
instances: [{value:1, score:2}, {value:2, score:5}, {value:2.5, score:9}]
},
{
name: "name2",
instances: [{value:6, score:3}, {value:1, score:6}, {value:3.7, score:5.2}]
}
]
Когда я хочу, чтобы получить все данные из документа, я использую aggregate
, потому что я хочу, чтобы каждый экземпляр возвращается как отдельные документ:
db.myCollection.aggregate([{$match:{name:"name1"}}, {$unwind:"$instances"}, {$project:{name:1, value:"$instances.value", score:"$instances.score"}}])
И все работает так, как я хочу.
Теперь на мой вопрос: я хочу отфильтровать возвращаемые данные по количеству баллов или по значению. Например, мне нужен массив всех поддокументов name1
, у которых значение больше или равно 2
. Я попытался добавить к объекту $match
'instances.value':{$gte:2}
, но он ничего не фильтровал, и я все еще получаю все 3 документа для этого запроса.
Любые идеи?
Помогите мне понять вашу проблему, у вас есть образец ожидаемый результат? – chridam
@chridam, ожидаемый результат: '[{name:" name1 ", value: 2, score: 5}, {name:" name1 ", value: 2.5, score: 9}]' – yarons
Cheers, я считаю, что @yogesh получил это правильно. – chridam