У меня есть следующие данные:
[
{
"_id": "1",
"people_list": [
{
"gender": "female",
"age": 20,
"adult": true,
"hobby": "soccer"
},
{
"gender": "female",
"age": 20,
"adult": true,
"hobby": "football"
},
{
"gender": "female",
"age": 20,
"adult": true,
"hobby": "basketball"
}
]
},
{
"_id": 2,
"people_list": [
{
"gender": "female",
"age": 20,
"adult": false,
"hobby": "soccer"
},
{
"gender": "male",
"age": 20,
"adult": true,
"hobby": "football"
},
{
"gender": "male",
"age": 20,
"adult": true,
"hobby": "basketball"
},
]
}
]
Я пытаюсь выполнить итерацию через people_list
и проверить, все ли элементы внутри могут соответствовать определенным критериям. Поэтому я планирую использовать allElementsTrue
. Код будет примерно следующим (скажем, я хочу проверить только adult
и age
):
db.collection.aggregate([
{
$match: {
$expr: {
$allElementsTrue: {
$map: {
input: "$people_list",
as: "ppl",
in: {
$and: [
{
"$eq": [
"$$ppl.adult",
true
],
"$eq": [
"$$ppl.age",
20
]
}
]
}
}
}
}
}
}
])
Однако я все равно получаю оба документа "_id": "1"
, и "_id": "2"
в выводе, несмотря на то, что поле adult
первого объекта "_id": "2"
s people_list
равно false
! Не знаю почему. Может ли кто-нибудь дать мне несколько предложений?
Я добавил код в эту игровую площадку для вашего удобства. Спасибо!