Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/449.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.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 如何使用mongoose聚合根据字段获取两个匹配文档的总和_Javascript_Mongoose_Count_Aggregation Framework - Fatal编程技术网

Javascript 如何使用mongoose聚合根据字段获取两个匹配文档的总和

Javascript 如何使用mongoose聚合根据字段获取两个匹配文档的总和,javascript,mongoose,count,aggregation-framework,Javascript,Mongoose,Count,Aggregation Framework,我有两个系列“员工”,“办公室” 我试图找出每个包含办公室代码的区域有多少员工。但同一地区可能有不止一个办公室 这就是我的办公室文件的样子 [ { _id: "5b7d0f77e231b6b530b0ee5a", code: "OB123456", city: "Canmore" // some other fields }, { _id: "5b7d

我有两个系列“员工”,“办公室”

我试图找出每个包含办公室代码的区域有多少员工。但同一地区可能有不止一个办公室

这就是我的办公室文件的样子

[
  {
    _id: "5b7d0f77e231b6b530b0ee5a",
    code: "OB123456",
    city: "Canmore"
    // some other fields            
  },
  {
    _id: "5b7d0f77e531b6b530b0ee5b",
    code: "OB858758",
    city: "Vancouver"
  },
  {
    _id: "5b7d0f77e531b6b530b0ee5d",
    code: "EE858758",
    city: "Vancouver"
  },
]
[
  {
    _id: "5b7d0f77e531b6b530b0edda",
    name: 'Charlie',
    office: {
      code: 'OB123456'
      // some other fields
    }
  },
  {
    _id: "5b7d0f73e531b6b530b0ee5b",
    name: 'Bill',
    office: {
      code: 'EE858758'
    }
  },
  {
    _id: "5b7d0f77e531b6b530b0ee5n",
    name: 'Echo',
    office: {
      code: 'OB123456'
    }
  },
];
这就是我的员工文档的外观

[
  {
    _id: "5b7d0f77e231b6b530b0ee5a",
    code: "OB123456",
    city: "Canmore"
    // some other fields            
  },
  {
    _id: "5b7d0f77e531b6b530b0ee5b",
    code: "OB858758",
    city: "Vancouver"
  },
  {
    _id: "5b7d0f77e531b6b530b0ee5d",
    code: "EE858758",
    city: "Vancouver"
  },
]
[
  {
    _id: "5b7d0f77e531b6b530b0edda",
    name: 'Charlie',
    office: {
      code: 'OB123456'
      // some other fields
    }
  },
  {
    _id: "5b7d0f73e531b6b530b0ee5b",
    name: 'Bill',
    office: {
      code: 'EE858758'
    }
  },
  {
    _id: "5b7d0f77e531b6b530b0ee5n",
    name: 'Echo',
    office: {
      code: 'OB123456'
    }
  },
];
我正在调查猫鼬的总数,并且只做了尝试

await Employee.aggregate([
      {
        $lookup: {
          from: 'offices',
          localField: 'office.code',
          foreignField: 'code',
          as: 'officeCode'
        },
        $group: {
          _id: 'officeCode.city',
          count: { $sum: 1 }
        }
      }
    ]);
这肯定不起作用,我试着阅读了一些聚合文档,但没有想出一个好主意如何完成这项工作

提前感谢您的任何建议或建议

我正在寻找的样本输出

{
    "Vancouver": 1,
    "Canmore": 2
}

您必须从办公室开始,而不是从员工开始,这样您就可以为每个地区(城市)创建代码列表,然后查找以与您的员工进行映射

db.office.aggregate([
  {
    $group: {
      _id: "$city",
      codes: {
        $addToSet: "$code"
      }
    }
  },
  {
    $lookup: {
      from: "employee",
      localField: "codes",
      foreignField: "office.code",
      as: "employees"
    },
    
  },
  {
    $group: {
      _id: null,
      data: {
        $push: {
          k: "$_id",
          v: {
            $size: "$employees"
          }
        }
      }
    }
  },
  {
    $replaceRoot: {
      newRoot: {
        "$arrayToObject": "$data"
      }
    }
  }
])
最后两个阶段仅用于按照预期输出中的描述格式化结果