sql >> Base de Datos >  >> NoSQL >> MongoDB

Mongoose encuentra documentos si la matriz contiene un valor

Hay algunas formas de lograr esto. La primera es mediante $elemMatch operador:

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

El segundo es de $in o $all operadores:

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

o

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 es como OR y $all gusta y. Para obtener más detalles, consulte este enlace:https://docs.mongodb.com /manual/referencia/operador/consulta/todas/

El tercero es por aggregate() función:

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

con el agregado () obtienes solo una identificación de categoría en tu matriz de categorías.