2016-05-16 2 views
0

Я использую следующий Mongoose Schema:Mongoose возвращение пустого массива ObectID, который не

var userSchema = new mongoose.Schema({ 

    ... 

    sentFriendsRequests: [{ 
    type : ObjectId, 
    }] 

)}; 

Я добавляю некоторые ObjectIds к sentFriendsRequests

User.update({ _id: userId }, 
    { $push: { sentFriendsRequests: targetId }}, 
    {safe: true, upsert: true}, function(err, result) { 
     if (err || !result) { 
      done(err); 
     } 
     done(null); 
}); 

Это, кажется, работает нормально , поскольку, поскольку я использую Mongolab для размещения моей базы данных, при отображении документов на экране я вижу, что ObjectIds с успехом добавляются в массив:

"receivedFriendsRequests": [ 
    "5720c659571a718705d58fc3" 
] 

Странная вещь в том, что при запросе этого массива, Mongoose всегда возвращают пустую ...

User.find({ _id: userId}, function(err, res) { 
    console.log(res[0].sentFriendsRequests); 
}); 
// prints [] 

ответ

1

Есть путаница mongodb с mongoose.

Mongoose необходимо определить схему, но mongodb нет.

Чтобы определить новый ObjectId в MongoDB:

var ObjectId = require('mongodb').ObjectID 
var objectId = new ObjectID(); 

в Мангуста:

var mongoose = require('mongoose'); 
var objectId = new mongoose.Types.ObjectId; 
0

Я наконец-то нашел, что использование var ObjectId = require('mongodb').ObjectID; делает Мангуст вернуть пустой массив, в то время как с помощью mongoose.Schema.Types.ObjectId работает правильно. Я не знаю, как это объяснить.

Смежные вопросы