我目前正在处理包含此类文档的集合
{
"_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由字母数字字符组成,它已经是一个字符串,对吗?
答案 0 :(得分:0)
由于某种原因,需要将id转换为字符串。我不明白为什么会这样,但只是添加"userID": id + ''
使查询按预期运行。