Има няколко начина да постигнете това. Първият е чрез $elemMatch
оператор:
const docs = await Documents.find({category: { $elemMatch: {$eq: 'yourCategory'} }});
// you may need to convert 'yourCategory' to ObjectId
Вторият е от $in
или $all
оператори:
const docs = await Documents.find({category: { $in: [yourCategory] }});
или
const docs = await Documents.find({category: { $all: [yourCategory] }});
// you can give more categories with these two approaches
//and again you may need to convert yourCategory to ObjectId
$in
е като ИЛИ и $all
като И. За повече подробности вижте тази връзка:https://docs.mongodb.com /manual/reference/operator/query/all/
Третият е от aggregate()
функция:
const docs = await Documents.aggregate([
{ $unwind: '$category' },
{ $match: { 'category': mongoose.Types.ObjectId(yourCategory) } }
]};
с aggregate() получавате само един идентификатор на категория във вашия масив от категории.