javascript - NodeJS og node-mongodb-native


Er lige begyndt med Node og prøver at få Mongo-driveren til at fungere. Jeg har sat min forbindelse op, og mærkeligt nok kan jeg indsætte ting uden problemer, men at kalde find på en samling giver vanvid.

var db = new mongo.Db('things', new mongo.Server('192.168.2.6',mongo.Connection.DEFAULT_PORT, {}), {});

db.open(function(err, db) {
    db.collection('things', function(err, collection) {
//          collection.insert(row);
        collection.find({}, null, function(err, cursor) {
            cursor.each(function(err, doc) {
                sys.puts(sys.inspect(doc,true));
            });
        });

    });
});

Hvis jeg fjerner kommentaren fra indsætningen og kommenterer søgningen ud, fungerer det fantastisk. Den omvendte situation holder desværre ikke, jeg får denne fejl:

        collection.find({}, null, function(err, cursor) {
            ^
TypeError: Cannot call method 'find' of null

Jeg er sikker på, at jeg gør noget fjollet, men for livet kan jeg ikke finde det...

Svar #1

Jeg fik det samme lige nu. Jeg indså, at db.collection bliver kaldt igen og igen af en eller anden grund, så jeg gjorde noget i stil med dette (hakkede lidt i din kode):

    var db = new mongo.Db('things', new mongo.Server('192.168.2.6',mongo.Connection.DEFAULT_PORT, {}), {});

    var Things;    

    db.open(function(err, db) {
        db.collection('things', function(err, collection) {
            Things = Things || collection;    
    });

   var findThings = function() {
       Things.find({}, null, function(err, cursor) {
           cursor.each(function(err, doc) {
               sys.puts(sys.inspect(doc,true));
           });
       });
   }

Jeg er klar over, at du spurgte om dette for 9 måneder siden. Håber dette gravearbejde stadig hjælper nogen. Held og lykke!

Svar #2

prøv at kalde collection.save() efter dit indsæt for at tømme din række.

tag et kig på http://www.learnboost.com/mongoose/

"I øjeblikket understøtter Mongoose kun manuel udtømning af data til serveren."