代码之家  ›  专栏  ›  技术社区  ›  Caldera500

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

  •  0
  • Caldera500  · 技术社区  · 6 年前

    我试图在$match(aggregate)函数中使用$in运算符。由于某些原因,它在'\u 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获得所需的结果。但由于某些原因,这不适用于“\u id”字段。

    2 回复  |  直到 6 年前
        1
  •  2
  •   Ankit    6 年前

    尝试使用

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

    然后像这样转换数组:

    var ids = [ObjectId('5ae6d812e5504726a69fc285'),ObjectId('5b0bcfc254c93a2734d56efb')];
    

    然后进行聚合。

        2
  •  3
  •   Akrion    6 年前

    $in 接线员工作得很好 $match .

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

    $group