Tengo una colección mongodb (usando mangosta) ("elementos") que incluye una matriz ("imágenes") entre sus propiedades. Algunos documentos de ejemplo:
[ { "_id" : ObjectId("543fa67e9672ec37ebe3d026"), "name" : "Alice", "images" : [ { url: "http://images.com/1.jpg" }, { url: "http://images.com/2.jpg" }, { url: "http://images.com/3.jpg" }, ] }, { "_id" : ObjectId("543fa67e9672ec37ebe3d027"), "name" : "Bob", "images" : [ { url: "http://images.com/4.jpg" }, { url: "http://images.com/5.jpg" }, ] }, ]Quiero implementar una consulta que devuelva, junto con otras propiedades del documento, la longitud de la matriz (y no el contenido de la matriz). Sé que puedo obtener la longitud de la matriz con
db.items.aggregate([ { "$project" : { "_id" : 0, "imagesLength" : { "$size" : "$images" } } } ]) Pero necesito los valores de imagesLength junto con los documentos devueltos con un hallazgo:
db.items.findMany( { ...filter }, { name: 1, imagesCount: 1 } ); La pregunta es: ¿cómo puedo obtener la longitud de la matriz junto con los resultados de la find ?
Puede hacer lo mismo que la proyección de agregación en el segundo argumento de find, a partir de MongoDB 4.4 , como parte de hacer que la proyección de find sea consistente con la etapa $project de agregación,
db.items.find( { ...filter }, { _id: 0, name: 1, images: { $size: "$images" } })Puede agregar una etapa de coincidencia al principio en su agregación para filtrar los resultados. Luego puede proyectar todos los campos necesarios y generar los nuevos.
db.items.aggregate([ { "$match" : { ...filter }, { "$project" : { "imagesLength" : { "$size" : "$images" }, "name": 1 } } ])