MongoDB匹配标准在汇总中意外发生

时间:2018-03-15 20:35:35

标签: node.js mongodb mongoose

我目前正在处理包含此类文档的集合

{
    "_id": {
        "$oid": "5aa8665dcfe5305814e6dd90"
    },
    "userID": "5aa71af7b562de0c690eb6e0",
    "rebate": 64,
    "status": "approved"
}

我正在运行的查询如下:

var id = "5aa71af7b562de0c690eb6e0";

Warranty.aggregate(
    [
        {
            $match: {
                "userID": id,
                "status": "approved"
            }
       },
       {
           $group: {
               "_id": null,
               "total": {
                   $sum: "$rebate"
               }
          }
      }
    ], function(err, sum) {

        if (err) throw err;

        res.send(sum);

});

目前,这将返回[]

预期结果为[ { "_id": null, "total": 64 } ]

我还尝试将变量id转换为ObjectId,如下所示:

"userID": mongoose.Types.ObjectId(id),结果仍然是一个空数组。

有趣的是,如果我删除了匹配的“userID”行,它会起作用并返回[ { "_id": null, "total": 64 } ],但我需要这个来限制查询仅限活跃用户。

我是Mongo聚合的新手。

可能的解决方案

出于某种原因,执行此操作"userID": id + '',可解决此问题。我真的不明白为什么;谁会向我解释为什么会这样?我会假设,因为id由字母数字字符组成,它已经是一个字符串,对吗?

1 个答案:

答案 0 :(得分:0)

由于某种原因,需要将id转换为字符串。我不明白为什么会这样,但只是添加"userID": id + ''使查询按预期运行。