2012-05-14 2 views
6

Я пытаюсь выполнить собственный запрос MongoDB find через свойство Mongoose Model. Я не предоставляю обратный вызов, поэтому я ожидаю, что find вернет объект Cursor, но вместо этого он вернет undefined. Согласно Mongoose docs, используемый драйвер доступен через YourModel.collection, и если я переключусь на чисто собственный код драйвера, find действительно возвращает Cursor, поэтому я не могу понять, что происходит.Поиск драйверов от модели Mongoose не возвращается Курсор

Вот фрагмент кода, который воспроизводит проблему:

var db = mongoose.connect('localhost', 'test'); 
var userSchema = new Schema({ 
    username: String, 
    emailAddress: String 
}); 
var User = mongoose.model('user', userSchema); 

var cursor = User.collection.find({}); 
// cursor will be set to undefined 

Я попытался шагнуть в код с узлом-инспектор, но это не позволяя мне. Любая идея, что я делаю неправильно?

ответ

11

Собственные методы драйвера проксированы для запуска на следующем тике, поэтому возвращаемые значения из драйвера не возвращаются.

Вместо этого вы можете передать обратный вызов, а второй аргумент arg - это курсор.

User.collection.find({}, function (err, cursor) { 
    // 
}); 

Любопытно, почему вам нужно обходить мангуста?

+1

А, это объясняет это. Спасибо, Аарон. Мотивация для этого была просто экспериментированием во время тестирования производительности. И когда это не сработало, как я ожидал, я не мог бы отпустить его, пока не понял, что происходит. – JohnnyHK

+0

Для тех, кто найдет это и не уверен, что с ним делать, минуя mongoose, подобный этому, и используя собственный драйвер, вернет курсор, который вам нужно будет превратить в массив, если вы хотите его использовать (например, res.json (doc) или что у вас есть ... User.collection.find ({}, function (err, cursor) { cursor.toArray (function (err, doc) { // делать что-то с doc }) ; }); –