{ _id: new ObjectId("61da0ab855483312e8f4483b"), products: [ { createdAt: 2022-01-08T22:05:44.635Z, _id: new ObjectId("61da0ab855483312e8f4483c"), productCode: 'otf', productName: 'facebookmeta', claims: [Array], permissions: [] }, { createdAt: 2022-01-08T22:05:44.635Z, _id: new ObjectId("61da0ab855483312e8f4483f"), productCode: '4pf', productName: 'twitteroauth', claims: [Array], permissions: [Array] } ], __v: 0 }Ahora he estado tratando de obtener solo un objeto de esta matriz con el método find() y findOne sin suerte. si paso en ciertas condiciones, aún termina devolviéndome una matriz con ambos objetos. solo quiero poder pasar dinámicamente las condiciones que pertenecen a un solo objeto en la matriz y recuperar ese objeto
MongoDB aplica condiciones de consulta en la recopilación y devuelve el resultado con los documentos coincidentes. Como ambos productos, twitteroauth y facebookmeta , son parte del mismo documento, se devolverá el documento coincidente completo.
Si solo desea una sola entrada coincidente en el documento, puede usar la canalización de agregación de MongoDB (con $unwind) donde puede modificar el conjunto de resultados.
Por ejemplo:
db.collection_name.aggregate([ { "$match": { // pass matching criteria/conditions here } }, { "$unwind": "$products" //to deconstruct products field in the result }, { "$match": { "products.productName": "twitteroauth" } } ])Tenga en cuenta que la segunda condición de coincidencia se usa para agregar criterios/condiciones de coincidencia adicionales en el conjunto de resultados deconstruido para que los productos se puedan filtrar.
Esto le dará el resultado algo como esto: -
{ _id: new ObjectId("61da0ab855483312e8f4483b"), products: { createdAt: 2022-01-08T22:05:44.635Z, _id: new ObjectId("61da0ab855483312e8f4483f"), productCode: '4pf', productName: 'twitteroauth', claims: [Array], permissions: [Array] }, __v: 0 }Referencia: https://docs.mongodb.com/manual/reference/operator/aggregation/unwind/