Es gibt einige Möglichkeiten, dies zu erreichen. Der erste Weg ist mit dem $elemMatch
-Operator:
const docs = await Documents.find({category: { $elemMatch: {$eq: 'yourCategory'} }});
// Möglicherweise müssen Sie 'yourCategory' in ObjectId konvertieren
Der zweite Weg ist mit den Operatoren $in
oder $all
:
const docs = await Documents.find({category: { $in: [yourCategory] }});
oder
const docs = await Documents.find({category: { $all: [yourCategory] }});
// Sie können mit diesen beiden Ansätzen mehrere Kategorien angeben
// und wieder müssen Sie yourCategory in ObjectId konvertieren
$in
ist wie ein OR und $all
wie ein AND. Weitere Details finden Sie unter diesem link: https://docs.mongodb.com/manual/reference/operator/query/all/
Der dritte Weg ist mit der aggregate()
-Funktion:
const docs = await Documents.aggregate([
{ $unwind: '$category' },
{ $match: { 'category': mongoose.Types.ObjectId(yourCategory) } }
]};
Mit der aggregate()-Funktion erhalten Sie nur eine Kategorie-ID in Ihrem Kategorie-Array.
Ich habe diese Code-Schnipsel aus meinen Projekten, in denen ich Dokumente mit bestimmten Kategorien finden musste. Sie können sie einfach an Ihre Bedürfnisse anpassen.