2012-05-14 35 views
6

Tôi đang cố gắng thực hiện truy vấn MongoDB find gốc thông qua thuộc tính collection của Mongoose Model. Tôi không cung cấp một cuộc gọi lại vì vậy tôi mong đợi tìm thấy để trả về một đối tượng Cursor, nhưng nó trả về undefined thay thế. Theo số Mongoose docs, trình điều khiển đang được sử dụng có thể truy cập qua YourModel.collection và nếu tôi chuyển sang sử dụng hoàn toàn mã trình điều khiển gốc find thì trả lại Cursor để tôi không thể biết được điều gì đang diễn ra.Trình điều khiển gốc tìm thấy từ mẫu Mongoose không trả lại Con trỏ

Dưới đây là một đoạn mã mà tái tạo các vấn đề:

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 

Tôi đã cố gắng để bước vào mã với nút-thanh tra, nhưng nó không cho tôi. Bất kỳ ý tưởng những gì tôi đang làm sai?

Trả lời

11

Các phương pháp trình điều khiển gốc đều được ủy quyền để chạy trên nextTick vì vậy các giá trị trả về từ trình điều khiển không được trả lại.

Thay vào đó, bạn có thể chuyển một cuộc gọi lại và tham số thứ 2 được trả về là con trỏ.

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

Tò mò tại sao bạn cần phải bỏ qua mongoose?

+1

Ah, điều đó giải thích điều đó. Cảm ơn, Aaron. Động lực để thực hiện nó chỉ là một số thử nghiệm trong quá trình kiểm tra hiệu năng. Và khi nó không hoạt động như tôi mong đợi, tôi không thể để nó đi cho đến khi tôi hiểu chuyện gì đang diễn ra. – JohnnyHK

+0

Đối với bất cứ ai tìm thấy điều này và không chắc chắn phải làm gì với nó, bỏ qua mongoose như thế này và sử dụng trình điều khiển gốc sẽ trả về một con trỏ, sau đó bạn cần phải biến thành một mảng nếu bạn muốn sử dụng nó (chẳng hạn như res.json (doc) hoặc những gì có bạn) ... User.collection.find ({}, hàm (err, con trỏ) { cursor.toArray (hàm (err, doc) { // làm công cụ với doc }) ; }); –

Các vấn đề liên quan