Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.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 使用聚合创建一个新文档,该文档使用特定值对字段进行汇总_Javascript_Node.js_Mongodb_Mongoose_Aggregation Framework - Fatal编程技术网

Javascript 使用聚合创建一个新文档,该文档使用特定值对字段进行汇总

Javascript 使用聚合创建一个新文档,该文档使用特定值对字段进行汇总,javascript,node.js,mongodb,mongoose,aggregation-framework,Javascript,Node.js,Mongodb,Mongoose,Aggregation Framework,我从聚合管道中获得以下信息。我想制作一个像这样的文档{upvotes:20,downvotes:30}。我想要一种方法来检查投票字段,如果值是向上则将其添加到向上投票字段,对于向下字段也是如此,但是添加到向下投票字段。我如何制作该文档 { _id: 57aea6791016c0b023a71e9d, review: { _id: 57aeb0ee1015118c2b19c8b9, updatedAt: Fri Aug 12 2016 22:33:17 GMT-0700

我从聚合管道中获得以下信息。我想制作一个像这样的文档{upvotes:20,downvotes:30}。我想要一种方法来检查
投票
字段,如果值是
向上
则将其添加到
向上投票
字段,对于
向下
字段也是如此,但是添加到
向下投票
字段。我如何制作该文档

 { _id: 57aea6791016c0b023a71e9d,
   review:
    { _id: 57aeb0ee1015118c2b19c8b9,
      updatedAt: Fri Aug 12 2016 22:33:17 GMT-0700 (Pacific Daylight Time),
      createdAt: Fri Aug 12 2016 22:32:30 GMT-0700 (Pacific Daylight Time),
      vote: 'up',
      reviewText: 'test pleas',
      company: 57aea6791016c0b023a71e9d,
      companyName: 'comp1',
      userType: 'anon',
      user: 57aeb0dd1015118c2b19c8b8,
      statements: [Object],
      __v: 0,
      className: '',
      momented: 'a minute ago' } },
 { _id: 57aea6791016c0b023a71e9d,
   review:
    { _id: 57aeb11d3a6bd2cc24b080ad,
      updatedAt: Fri Aug 12 2016 22:33:17 GMT-0700 (Pacific Daylight Time),
      createdAt: Fri Aug 12 2016 22:33:17 GMT-0700 (Pacific Daylight Time),
      vote: 'down',
      reviewText: 'This will hopefully be good',
      company: 57aea6791016c0b023a71e9d,
      companyName: 'comp1',
      userType: 'anon',
      user: 57aeb1033a6bd2cc24b080ac,
      statements: [Object],
      __v: 0,
      className: 'thisUser',
      momented: 'a few seconds ago' } } ]
迄今为止的聚合

Comps.aggregate([
    {"$unwind" : "$reviews"},
    {
        "$lookup":{
            "from" : "reviews",
            "localField" : "reviews",
            "foreignField" : "_id",
            "as" : "review"
        }
    },
    { "$unwind": "$review" },
    {$project : {
        review:1
    }}

一种可能的解决方案是使用$cond操作符将“向上”/“向下”映射到1/0,以便在$group阶段轻松求和。我认为在当前聚合管道中添加以下内容应该可以:

$group: {
    _id: "$_id",
    upvotes: {$sum: {$cond: [{$eq: ["up", "$review.vote"]}, 1, 0]}},
    downvotes: {$sum: {$cond: [{$eq: ["down", "$review.vote"]}, 1, 0]}}
}
以下是有关的文档