2012-07-27 16 views
11

मैं mongodb के साथ खेल रहा था और 'उपयोगकर्ता' संग्रह में कुछ परीक्षण डेटा {name: "david"} दर्ज किया था। मैं मोंगो खोल का उपयोग कर सत्यापित टाइपिंगnode.js MongoDB क्वेरी परिणाम वापस नहीं कर रहा है

db.users.find() 

परिणाम द्वारा उस डेटा MongoDB में था:

{ "name":"david" } 

Node.js स्क्रिप्ट में, निम्न कोड:

db.open(function(err, db) { 
    if (!err) { 
     console.log("db opened!"); 
    } 
    else { 
     console.log(err); 
    } 
    db.collection('users', function(err, collection) { 
     collection.find({}, function(err, cursor) { 
      cursor.each(function(err, item) { 
       console.log(item); 
      }); 
     }); 
    }); 
    db.close(); 
}); 

वापस नहीं करता है कोई परिणाम

मुझे कुछ भी गलत नहीं दिख रहा है, और कोई त्रुटि नहीं लौटाती है। कृपया

उत्तर

9

आप वास्तव में अपने डेटाबेस कनेक्शन बंद करने से पहले ही संग्रह से डेटा वापस आ गया है:

var server = new Server(host, port, {auto_reconnect: true, poolSize: 5}, {}); 

MyStore.prototype.getUsers = function(callback) { 
server.open(function(err, db) { 
    if (err) { 
     callback(err); 
    } 
    else { 
     db.collection('users', function(err, collection) { 
      if(err) 
       callback(err); 
      else { 
       collection.find().toArray(function(err, users) { 
        if (err) { 
         callback(err) 
        } else { 
         callback(null, users); 
        } 
       }); 
      } 
     } 
    }}); 

यहाँ नोड + मोंगो पर एक और ट्यूटोरियल है कि मदद मिल सकती है है।

db.collection('users', function(err, collection) { 
    collection.find({}, function(err, cursor) { 
    cursor.each(function(err, item) { 
     console.log(item); 
    }); 

    // our collection has returned, now we can close the database 
    db.close(); 
    }); 
}); 
2

यह पैटर्न मेरे नोड/मोन्गो नमूना में ठीक काम कर रहा है। फ़ंक्शन को कॉलबैक पास किया जाता है जो त्रुटि, संग्रह लेता है। यह 'उपयोगकर्ता' संग्रह प्राप्त करता है और यदि सफल होता है, तो कॉल संग्रह के खिलाफ मिलती है और उसे एक सरणी में परिवर्तित कर देती है लेकिन आप कर्सर पर भी पुनरावृत्ति कर सकते हैं।

db.collection और connection.find कॉल के अंदर, आप भूल करते हैं और से निपटने के लिए जाँच नहीं कर रहे हैं। आप इसे केवल खुले कॉल पर कर रहे हैं।

इसके अलावा, आपको db.close() को कॉल नहीं करना चाहिए, विशेष रूप से यदि आप connection pool option के साथ खोल रहे हैं (आप प्रत्येक कॉल पर कनेक्शन खोलना और बंद नहीं करना चाहते हैं)। अगर आप बंद करना चाहते हैं, तो कॉलबैक के अंदर बंद करें।

कुछ की तरह: http://howtonode.org/express-mongodb

4

जैसा कि सीजोहन सही ढंग से बताता है कि आप डेटा पुनर्प्राप्त करने से पहले डीबी कनेक्शन बंद कर रहे हैं। मुझे पता है कि यह ऐसा नहीं दिखता है लेकिन यह नोड संरचना और कॉलबैक के मामले में है। सही तरीके से इसे संभालने के लिए कोड है:

db.open(function(err, db) { 
    if (err) return console.log('error opening db, err = ', err); 

    console.log("db opened!"); 

    db.collection('users', function(err, collection) { 
     if (err) return console.log('error opening users collection, err = ', err); 

     collection.find({}, function(err, cursor) { 
      if (err) return console.log('error initiating find on users, err = ', err); 

      cursor.each(function(err, item) { 
       // watch for both errors and the end of the data 
       if (err || ! item) { 
        // display (or do something more interesting) with the error 
        if (err) console.log('error walking data, err = ', err); 

        // close the connection when done OR on error 
        db.close(); 

        return; 
       } 
       console.log(item); 
      }); 
     }); 
    }); 
}); 
3

अपने नोड को नवीनतम संस्करण में अपग्रेड करने का प्रयास करें।

sudo npm cache clean -f 
sudo npm install -g n 
sudo n stable 

संस्करण 0.4 ठीक से काम नहीं कर सकता है।

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