我可以在mongodb的$ match聚合函数中使用$ in吗

时间:2018-09-06 04:17:55

标签: mongodb mongoose aggregation

我正在尝试在$ 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”字段。

2 个答案:

答案 0 :(得分:1)

$in运算符可以与$match一起正常工作。

您的总和似乎不正确,

Product.aggregate([
 {$match : {_id : {$in : ids}}},
 {$group : {_id : '$pCode', total : {$sum : '$pWeight'}}}
]).exec(function(err, res){
   res.json(res);
})

看看这是否行得通,如果不简单地在没有该组的情况下运行查询,那么您可以看到它行之有效,然后在您的$group部分工作。

答案 1 :(得分:1)

尝试使用

http://www.bing.com

然后像这样转换数组:

const ObjectId = require("mongodb").ObjectID;

,然后进行汇总。 对于使用ORM的聚合,您必须明确地对其进行转换。