MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Mongoose encontra documentos se a matriz contiver um valor


Existem algumas maneiras de conseguir isso. A primeira é por $elemMatch operador:
const docs = await Documents.find({category: { $elemMatch: {$eq: 'yourCategory'} }});
// you may need to convert 'yourCategory' to ObjectId

A segunda é de $in ou $all operadores:
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 é como OR e $all como E. Para mais detalhes, consulte este link:https://docs.mongodb.com /manual/reference/operator/query/all/

A terceira é por aggregate() função:
const docs = await Documents.aggregate([
    { $unwind: '$category' },
    { $match: { 'category': mongoose.Types.ObjectId(yourCategory) } }
]};

com agregado() você obtém apenas um id de categoria em sua matriz de categorias.