MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Mongoose trouve des documents si le tableau contient une valeur

Il existe plusieurs façons d'y parvenir. La première consiste à utiliser $elemMatch opérateur :

const docs = await Documents.find({category: { $elemMatch: {$eq: 'yourCategory'} }});
// you may need to convert 'yourCategory' to ObjectId

Le second est par $in ou $all opérateurs :

const docs = await Documents.find({category: { $in: [yourCategory] }});

ou

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 est comme OR et $all comme ET. Pour plus de détails, consultez ce lien :https://docs.mongodb.com /manual/reference/operator/query/all/

Le troisième est par aggregate() fonction :

const docs = await Documents.aggregate([
    { $unwind: '$category' },
    { $match: { 'category': mongoose.Types.ObjectId(yourCategory) } }
]};

avecaggregate(), vous obtenez un seul identifiant de catégorie dans votre tableau de catégories.