【问题标题】:MongoError: exception: invalid operator '$setUnion'MongoError:异常:无效运算符'$setUnion'
【发布时间】:2015-03-11 06:17:44
【问题描述】:

我正在尝试在聚合查询中使用 $setUnion,它在 MongoDB 控制台中运行良好,但是当我尝试在我的 Node 应用程序中使用 Mongoose 执行相同操作时,它会失败并出现以下错误:

{ 
  [MongoError: exception: invalid operator '$setUnion']
  name: 'MongoError',
  errmsg: 'exception: invalid operator \'$setUnion\'',
  code: 15999,
  ok: 0 
}

这是我尝试过但在应用程序中仍然失败的简化查询:

db.users.aggregate(
  { 
    $match: { _id: ObjectId("52c9375c497ed763f41941bd") }
  },
  {
    $project: {
      activities: { 
        $setUnion: [[1,2], [3,4]] 
      }
    }
  }
);

有什么想法我可能做错了吗?

MongoDB:2.6.6,Mongoose:3.8.21,节点:0.10.26

更新:这里是 Mongoose 代码

var User = require('./providers/db').User,
  mongoose = require('mongoose');

User.aggregate({ 
  $match: { _id: mongoose.Types.ObjectId("52c9375c497ed763f41941bd") }
},
{
  $project: {
    activities: { 
      $setUnion: [[1,2], [3,4]] 
    }
  }
}, function (err, result) {
  if (err) { return console.log(err); }
  else { console.log(result); }
});

【问题讨论】:

  • 好吧,如果这是您的问题,那么您可以发布产生和错误的猫鼬代码。但我认为你的猫鼬代码在显示时会出现“错字”。
  • 你是对的,我的错,我在我的问题中添加了猫鼬代码
  • 老兄,这在任何地方都有效。你做错了其他事情。我认为这里对任何人都没有任何好处。您的{ "$setUnion": [[1,2], [3,4]] } 示例对文档检查没有任何积极影响,结果只是[ 1, 4, 3 ,2 ]。你犯了一个编码错误。寻找并纠正它。这行得通。
  • 当然这个例子没有任何结果,我简化了它以确保它没有错误。所有代码都在问题中,我找不到任何错误,这就是我首先来到这里的原因......
  • 好吧,我认为您在某处犯了明显的语法错误或输入错误。但是既然你强迫我举一个例子来证明你的情况是不正确的,那么我会的。

标签: node.js mongodb mongoose mongodb-query aggregation-framework


【解决方案1】:

真的没有看到这里的重点,并要求你看一下。也不能说我没有警告过你几次。我相信您正在寻找的词是“非常感谢”:

var testSchema  = new Schema({},{ "strict": false });

var User = mongoose.model( "User", testSchema, "test" );

mongoose.connect("mongodb://localhost/test");

async.series(
  [
    function(callback) {
      User.remove({},callback);
    },

    function(callback) {
      User.create({ "a": 1 },callback);
    },

    function(callback) {
      User.aggregate(
        [
          { "$project": {
            "activities": {
              "$setUnion": [[1,2],[3,4]]
            }
          }}
        ],
        function(err,result) {
          if (err) throw err;
          console.log( result );
          process.exit();
        }
      );
    }
  ],
  function(err) {
    if (err) throw err;
  }
);

然后返回:

 [ { _id: 54b4c13decda256710226134, activities: [ 1, 4, 3, 2 ] } ]

正如预期的那样。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-29
    • 1970-01-01
    • 2015-10-15
    • 2020-10-03
    • 2010-10-25
    • 1970-01-01
    • 2014-02-21
    • 2019-03-28
    相关资源
    最近更新 更多