【问题标题】:Mongoose sum operation in collection集合中的猫鼬求和操作
【发布时间】:2015-02-27 12:15:00
【问题描述】:

我有一个名为votes的集合:

    {
        "_id" : ObjectId("54a3cb59b2b8ded51693074d"),
        "Pseudo" : "Cacaboy",
        "Type" : "down",
        "postvote" : ObjectId("54a2f05bedbe1109145b06b6"),
        "CreatedDate" : ISODate("2014-12-31T10:02:34.209Z"),
        "__v" : 0
    }

    {
        "_id" : ObjectId("54a3d776ecbf63c61a91d396"),
        "Pseudo" : "CosmicJB",
        "Type" : "up",
        "postvote" : ObjectId("54a2f05bedbe1109145b06b6"),
        "CreatedDate" : ISODate("2014-12-31T11:01:10.715Z"),
        "__v" : 0
    }

    {
        "_id" : ObjectId("54a3dca5b2b8ded51693074e"),
        "Pseudo" : "hateman",
        "Type" : "down",
        "postvote" : ObjectId("54a2f05bedbe1109145b06b6"),
        "CreatedDate" : ISODate("2014-12-31T10:02:34.209Z"),
        "__v" : 0
    }

实施的聚合管道:

Vote.aggregate({$match: {postvote: pvote}}, 
               {$group: {_id: '$Type', 
                         n: { $sum: 1 }
                        }},
               function(err, cb){
                  console.log(cb);
             });

获得o/p:

[ { _id: 'up', n: 1 }, { _id: 'down', n: 2 } ]

想要的结果,对于postvote

  • 如果updown 投票,则两者都在场,则result:up-down
  • 如果只有down 投票,那么result: -down
  • 如果只有up 投票,那么result:up

是否可以使用聚合?

【问题讨论】:

  • 如果 up - down = result 是什么意思?
  • 所以你要计算净票数?
  • @Barno 一个聚合函数返回 voteUP 减去 voteDOWN
  • 是的@BatScream,我想根据postvote是否存在投票和投票来计算投票
  • @PixelPixel,请务必注意正确格式化问题并准确表达您的要求。这将有助于您的问题得到更多关注。请查看我的回答。

标签: node.js mongodb mongoose


【解决方案1】:

您需要修改您的聚合管道以执行以下操作:

  • Match 具有所需 postvote id 的记录。
  • 对于每条记录,投影一个名为 weight 的额外字段,对于 Type - up 的记录, 权重为1,另一个为-1
  • Group 基于 postvote 字段,到 project weight 字段的总和为 postvoteresult

代码:

Vote.aggregate(
{$match:{"postvote":pvote}},
{$project:{"postvote":1,"weight":{$cond:[{$eq:["$Type","up"]},1,-1]}}},
{$group:{"_id":"$postvote","result":{$sum:"$weight"}}},
function(err,data){
 // handle response.
}
)

样本 o/p:

{ "_id" : ObjectId("54a2f05bedbe1109145b06b6"), "result" : -1 }

【讨论】:

  • 同意,我明白现在该怎么做,thanx。
猜你喜欢
  • 2018-03-19
  • 2021-01-18
  • 2023-03-29
  • 2022-08-08
  • 2021-12-21
  • 2018-12-03
  • 2015-05-19
  • 2016-02-02
  • 1970-01-01
相关资源
最近更新 更多