у меня проблемы с запросом этого типа данных
[
{ev:1,
image:[{id:24,name:'ads1'},{id:25,name:'ads2'},{id:26,name:'ads4'},{id:27,name:'ads3'}]
},
{ev:1,
image:[{id:29,name:'ads1'},{id:23,name:'ads2'},{id:34,name:'ads4'},{id:50,name:'ads3'}]
}
]
это мой запрос
var data = schema.find( {
$and: [
{
ev: 1
},
{
'image.id': {
$in: [26,29,50,34]
}
}
]
} , 'ev image' )
какой результат мне нужен
[
{ev:1,
image:[{id:26,name:'ads4'}]
},
{ev:1,
image:[{id:29,name:'ads1'},{id:34,name:'ads4'}, {id:50,name:'ads3'}]
}
]
Я использую Moongose
но я продолжаю возвращать весь массив изображений
мне в основном нужен объект изображения, отфильтрованный только с изображением.id, который я хочу
PS есть больше ev 1,2,3 .... поэтому мне нужно найти только в ev, который я предоставляю
может кто-нибудь, пожалуйста, помогите мне с этим
я новичок в монгодб
Find используется для сохранения или отклонения полных документов (find также имеет проект, но в целом для преобразований мы используем агрегатные операторы). Ниже приведена агрегация, которая сохраняет только часть массива.
Запрос
ev=1
[26, 29, 50, 34]
aggregate(
[{"$match": {"ev": {"$eq": 1}}},
{"$set":
{"image":
{"$filter":
{"input": "$image",
"cond": {"$in": ["$$this.id", [26, 29, 50, 34]]}}}}}])
попробуйте это, как указано выше, с одним дополнительным этапом матча в конце {"$match": {"$expr": {"$ne": ["$image", []]}}}
эй, это работает, не могли бы вы показать мне, как фильтровать пустой массив .... извините за беспокойство. пытаюсь научиться этому