MongoError: исключение: недопустимый оператор '$ setUnion'

Я пытаюсь использовать $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, Мангуст: 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); }
});

person jc-tzn    schedule 13.01.2015    source источник
comment
Ну, вы могли бы опубликовать код мангуста, который вызывает ошибку, если это ваш вопрос. Но я думаю, что ваш код мангуста будет ошибкой из-за опечатки при отображении.   -  person Neil Lunn    schedule 13.01.2015
comment
Вы правы, моя проблема, я добавил код мангуста к своему вопросу   -  person jc-tzn    schedule 13.01.2015
comment
Чувак, это работает везде. Вы делаете что-то еще не так. Я не вижу здесь никакой пользы ни для кого. Ваш { "$setUnion": [[1,2], [3,4]] } пример не дал ничего положительного по сравнению с проверкой документов и только [ 1, 4, 3 ,2 ] в результате. Вы допустили ошибку кодирования. Ищите и исправляйте. Это работает.   -  person Neil Lunn    schedule 13.01.2015
comment
Конечно, пример ни к чему не приводит, я упростил его, чтобы убедиться, что в нем нет ошибок. Весь код в вопросе, и я не могу найти в нем никаких ошибок, поэтому я и пришел сюда в первую очередь ...   -  person jc-tzn    schedule 13.01.2015
comment
Что ж, я думаю, вы где-то допустили явную синтаксическую ошибку или опечатку. Но поскольку вы заставляете меня привести пример, доказывающий, что ваш случай неверен, я это сделаю.   -  person Neil Lunn    schedule 13.01.2015


Ответы (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 ] } ]

как и следовало ожидать.

person Neil Lunn    schedule 13.01.2015