2012-05-14 18 views
6

वापस नहीं लौटा रहा है मैं एक मोंगोस Model की collection संपत्ति के माध्यम से मूल मोंगोडीबी find क्वेरी निष्पादित करने का प्रयास कर रहा हूं। मैं कॉलबैक की आपूर्ति नहीं कर रहा हूं इसलिए मुझे उम्मीद है कि यह खोज Cursor ऑब्जेक्ट लौटाएगी, लेकिन यह इसके बजाय undefined लौटाती है। Mongoose docs के अनुसार, चालक इस्तेमाल किया जा रहा YourModel.collection के माध्यम से पहुँचा जा सकता है और अगर मैं विशुद्ध रूप से देशी ड्राइवर कोड find उपयोग भी कर वापसी एक Cursor तो मैं समझ नहीं क्या हो रहा है है।मोंगोस मॉडल से मूल चालक को कर्सर

कोड स्निपेट है कि समस्या reproduces है:

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

देशी ड्राइवर तरीकों सभी nextTick पर चलाने के लिए तो ड्राइवर से मान वापस नहीं कर रहे हैं प्रॉक्सी कर रहे हैं।

इसके बजाय, आप एक कॉलबैक पारित कर सकते हैं और 2 आर्ग वापस लौटाई कर्सर है।

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

उत्सुक क्यों आपको मोंगोस को बाईपास करने की आवश्यकता है?

+1

आह, अच्छी तरह से है कि यह बताते हैं। धन्यवाद, हारून। ऐसा करने के लिए प्रेरणा प्रदर्शन परीक्षण के दौरान बस कुछ प्रयोग था। और जब यह काम नहीं करता था, जैसा कि मैंने उम्मीद की थी, तब तक मुझे ऐसा नहीं लगता था जब तक कि मुझे समझ में नहीं आया कि क्या हो रहा था। – JohnnyHK

+0

किसी के लिए यह और क्या इस तरह नेवला को दरकिनार और देशी ड्राइवर का उपयोग कर एक कर्सर, जिसे फिर आप एक सरणी में बदलने के लिए आप इसे (जैसे res.json के रूप में (उपयोग करना चाहते हैं की जरूरत है वापस आ जाएगी इसके साथ क्या करना है, यकीन नहीं लग रहा डॉक्टर) या आपके पास क्या है ... User.collection.find ({}, फ़ंक्शन (त्रुटि, कर्सर) { कर्सर .toArray (फ़ंक्शन (त्रुटि, दस्तावेज़) { // दस्तावेज़ } के साथ सामग्री करें) ; }); –

संबंधित मुद्दे