Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何根据mongodb中的值计算数组中的文档数?_Javascript_Node.js_Mongodb_Express_Mongoose - Fatal编程技术网

Javascript 如何根据mongodb中的值计算数组中的文档数?

Javascript 如何根据mongodb中的值计算数组中的文档数?,javascript,node.js,mongodb,express,mongoose,Javascript,Node.js,Mongodb,Express,Mongoose,我需要计算停车位的数量_id:5d752c544f4f1c0f1c93eb23,它在excluded属性中具有假值,我如何装载查询 到目前为止,我已经能够使用excluded:false属性选择停车位的数量。但是我们正在从所有停车场中进行选择 请注意,有两个文档表示停车场,其中每个文档都有一个数组,称为parkingSpaces,用于记录停车场文档 第一个文档有两个未排除的空缺,因此排除了属性:false,第二个文档只有一个空缺,也没有排除 { "_id": "5d752c544

我需要计算停车位的数量_id:5d752c544f4f1c0f1c93eb23,它在excluded属性中具有假值,我如何装载查询

到目前为止,我已经能够使用excluded:false属性选择停车位的数量。但是我们正在从所有停车场中进行选择

请注意,有两个文档表示停车场,其中每个文档都有一个数组,称为parkingSpaces,用于记录停车场文档

第一个文档有两个未排除的空缺,因此排除了属性:false,第二个文档只有一个空缺,也没有排除

{
        "_id": "5d752c544f4f1c0f1c93eb23",
        "name": "estacionamento um",
        "parkingSpace": [
            {
                "_id": "5d752cf54f4f1c0f1c93eb26",
                "name": "vg001",
                "excluded": true

            },
            {
                "_id": "5d752cf54f4f1c0f1c93eb27",
                "name": "vg001",
                "excluded": false

            },
            {
                "_id": "5d75339bc411423a9c14ac52",
                "name": "vg002",
                "excluded": false
            }
        ]
    },
    {
        "_id": "5d7706b60d354b72388a38f4",
        "name": "estacionamento dois",
        "parkingSpace": [
            {
                "_id": "5d77078a5173bb63bc87b7ca",
                "name": "vg004",
                "excluded": false
            }
        ]
    }

我需要添加停车位的数量_id:5d752c544f4f1c0f1c93eb23,它在排除属性中的值为false

最后,我需要返回值2,参考_id:5d752c544f4f1c0f1c93eb23停车位,它在excluded属性中的值为false

到目前为止,通过下面的查询,我能够选择带有假值的排除属性的空缺,但它正在从所有停车场中进行选择

const registeredParkingSpaces = await Parking.aggregate([
        { $unwind: '$parkingSpace' },
        { $match: { 'parkingSpace.excluded': false } },
        {
            $group: {
                _id: parking_id,
                total: { $sum: 1 }
            }
        }
 ]);
返回:

{
  "message": [
    {
      "_id": "5d752c544f4f1c0f1c93eb23",
      "total": 3
    }
  ]
}
但它需要回归:

{
  "message": [
    {
      "_id": "5d752c544f4f1c0f1c93eb23",
      "total": 2
    }
  ]
}

这是一个查询,通过它您可以获得总停车次数

**更新**

      db.collection.aggregate([
  {
    $match: {
      "parkingSpace.excluded": false,

    }
  },
  {
    $project: {
      parkingSpace: 1
    }
  },
  {
    "$group": {
      "_id": "$_id",
      "count": {
        "$sum": {
          "$size": {
            "$filter": {
              "input": "$parkingSpace",
              "as": "el",
              "cond": {
                "$eq": [
                  "$$el.excluded",
                  false
                ]
              }
            }
          }
        }
      }
    }
  }
])


您可以从此
有关$sum的更多信息:请访问官方网站

通过这个,你得到了你的解决方案

在聚合中,首先您与id匹配,然后进行下一步,您将获得您的愿望计数,因为此时您正在考虑整个文档“parkingSpace”。下面是示例代码,我想它会适合您

const ObjectId = require('mongoose').Types.ObjectId;
const registeredParkingSpaces = await Parking.aggregate([
        { $match: { _id: objectId(body.id) } }
        { $unwind: '$parkingSpace' },
        { $match: { 'parkingSpace.excluded': false } },
        {
            $group: {
                _id: parking_id,
                total: { $sum: 1 }
            }
        }
 ]);

事实上,他只需要返回一个,因为其中一个空缺的属性被排除在外:True,但由于我删除了多个作业,它会不断返回“1”。我需要使用排除在外的:false parking属性计算停车位,id为:“5d752c544f4f1c0f1c93eb23”。在本例中,文档有3个空缺,其中两个不包含属性:falseNow检查最终代码。这就是你想要的@劳尔格尔马诺在这里测试了一下,效果不错,谢谢。它对第一个和第二个id有效。我添加了更多的停车位,排除和不排除,并且有效:D