Javascript 如何在find()中获取数组长度而不是完整数组?

Javascript 如何在find()中获取数组长度而不是完整数组?,javascript,node.js,arrays,mongodb,mongoose,Javascript,Node.js,Arrays,Mongodb,Mongoose,我有一个使用mongoose集合项的mongodb,它的属性中包含一个数组图像。一些示例文档: [ { "_id" : ObjectId("543fa67e9672ec37ebe3d026"), "name" : "Alice", "images" : [ { url: "http://images.com/1.jpg" },

我有一个使用mongoose集合项的mongodb,它的属性中包含一个数组图像。一些示例文档:

[
  {
    "_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" },
    ]
  },
]
我想实现一个查询,它与其他文档属性一起返回数组长度,而不是数组内容。我知道我可以用

db.items.aggregate([
  { "$project" : { "_id" : 0, "imagesLength" : { "$size" : "$images" } } }
])
但我需要imagesLength值以及随find返回的文档:

db.items.findMany(
  { ...filter },
  { name: 1, imagesCount: 1 }
);

问题是:如何获得数组长度和查找结果?

您可以首先在聚合中添加匹配阶段以过滤结果。然后您可以投影所有需要的字段并生成新字段

db.items.aggregate([
  { "$match" : { ...filter },
  { "$project" : { "imagesLength" : { "$size" : "$images" }, "name": 1 } }
])

您可以首先在聚合中添加匹配阶段以过滤结果。然后您可以投影所有需要的字段并生成新字段

db.items.aggregate([
  { "$match" : { ...filter },
  { "$project" : { "imagesLength" : { "$size" : "$images" }, "name": 1 } }
])

可以执行与find的第二个参数中的聚合投影相同的操作, ,作为使find projection与aggregation的$project阶段保持一致的一部分


可以执行与find的第二个参数中的聚合投影相同的操作, ,作为使find projection与aggregation的$project阶段保持一致的一部分