【发布时间】:2019-02-11 06:24:37
【问题描述】:
我正在尝试在 $match(聚合)函数中使用 $in 运算符。出于某种原因,它不适用于“_Id”字段,但我找不到任何说明 mongodb 不支持此功能的文档。
var ids = ['1', '2', '3', '4']; //an example. I am using real mongo object ids
// this is working fine
Product.find({_id : {$in : ids}})
.exec(function(err, res){
res.json(res);
});
// no results here
Product.aggregate([
{$match : {_id : {$in : ids}}},
{$group : {_id : '$pCode', total : {$sum : '$pWeight'}}])
.exec(function(err, res){
res.json(res);
现在,如果我使用其他字段进行查询,它可以正常工作,并且我使用 $in 获得了所需的结果。但由于某种原因,这不适用于“_id”字段。
【问题讨论】:
-
Mongoose 不会为您使用
aggregate进行任何ids的转换,但它会为find进行转换。因此,请确保ids包含实际的ObjectId对象,而不仅仅是字符串。 -
我会建议,让猫鼬调试为真,这样你就可以轻松调试了。
-
感谢 JohnnyHK。一旦我有正确的对象 ID,每个都按预期工作。我希望 mongodb 文档会提到这一点。很清楚。
标签: mongodb mongoose aggregation