Existuje několik způsobů, jak toho dosáhnout. První je pomocí $elemMatch
operátor:
const docs = await Documents.find({category: { $elemMatch: {$eq: 'yourCategory'} }});
// you may need to convert 'yourCategory' to ObjectId
Druhý je od $in
nebo $all
operátoři:
const docs = await Documents.find({category: { $in: [yourCategory] }});
nebo
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
je jako OR a $all
jako AND. Další podrobnosti naleznete na tomto odkazu:https://docs.mongodb.com /manual/reference/operator/query/all/
Třetí je pomocí aggregate()
funkce:
const docs = await Documents.aggregate([
{ $unwind: '$category' },
{ $match: { 'category': mongoose.Types.ObjectId(yourCategory) } }
]};
s agregací() získáte pouze jedno ID kategorie v poli kategorií.