MongoError:exception:无效的运算符' $ setUnion'

时间:2015-01-13 10:13:03

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

我正在尝试在聚合查询中使用$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); }
});

1 个答案:

答案 0 :(得分:0)

真的没有在这里看到这一点并且确实要求你去看它。并且不能说我没有多次警告过你。我相信你要找的那个词是非常感谢你的#34;:

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 ] } ]

就像预期的那样。