0

Я пытаюсь использовать $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, Node: 0.10.26

Update: Вот код 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

Чувак это работает везде. Вы делаете что-то еще неправильно. Я не вижу никакой пользы здесь для всех. Ваш пример '{" $ setUnion ": [[1,2], [3,4]]} не приводит к положительному результату проверки документа и просто' [1, 4, 3, 2] '. Вы сделали ошибку кодирования. Ищите его и исправьте. Это работает. –

ответ

0

На самом деле не вижу смысла здесь и попросил вас взглянуть на него. И не могу сказать, что я не предупреждал вас несколько раз. Я считаю, что этот термин вы ищете «спасибо»:

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

так же, как можно было бы ожидать.