sql >> Databáze >  >> NoSQL >> MongoDB

Mongoose najde dokumenty, pokud pole obsahuje hodnotu

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í.



  1. MongoDB:Jak se dotazovat na časovou řadu s neúplnými daty?

  2. Rekurzivní vyhledávání v kolekci v MongoDB

  3. Schéma Mongoose:„unikátní“ není respektováno

  4. DBRefs (odkazy na dokument Mongo) nebyly stahovány dychtivě