что вам нужно понять здесь является то, что ваш запрос предназначен для фильтрации «документов» и не фильтрует элементы массива «внутри» документа. Для того, чтобы фактически фильтровать содержимое массива для более чем одной игры вам необходимо использовать структуру агрегации:
db.users.aggregate([
// Matches the "documents" containing those elements in the array
{ "$match": {
"injury._id":{
"$in": [
ObjectId("538d9e7ed173e5202a000065"),
ObjectId("538f21868a5fc5e01f000065")
]
}
}},
// Unwind the array to de-normalize as documents
{ "$unwind": "$injury" },
// Match the array members
{ "$match": {
"injury._id":{
"$in": [
ObjectId("538d9e7ed173e5202a000065"),
ObjectId("538f21868a5fc5e01f000065")
]
}
}},
// Group back as an array
{ "$group": {
"_id": "$_id",
"injury": { "$push": "$injury" }
}}
])
Под MongoDB 2.6 и выше, вы можете использовать $map
фильтровать массив:
db.users.aggregate([
// Matches the "documents" containing those elements in the array
{ "$match": {
"injury._id":{
"$in": [
ObjectId("538d9e7ed173e5202a000065"),
ObjectId("538f21868a5fc5e01f000065")
]
}
}},
// Project with $map to filter
{ "$project": {
"injury": {
"$setDifference": [
{ "$map": {
"input": "$injury",
"as": "el",
"in": {
"$cond": [
{
"$or": [
{ "$eq": [
"$$el._id"
ObjectId("538d9e7ed173e5202a000065")
]},
{ "$eq": [
"$$el._id"
ObjectId("538f21868a5fc5e01f000065")
]}
]
},
"$$el",
false
]
}
}},
[false]
]
}
}}
])
Да. Это массив, и это не фильтрует массив. У вас также есть аналогичные вопросы, которые вы задали раньше, и им были даны ответы относительно того, как это сделать, но вы не представили свои данные ни на одном из них, и вы снова сделали то же самое, предоставив скриншот, а не фактические данные. Я предлагаю вам вернуться к своим предыдущим вопросам и уточнить свои данные, чтобы на самом деле можно было провести через это. –