جافاسكريبت - NodeJS و node-mongodb-native


بدأت للتو مع نود، وأحاول تشغيل مشغل مونجو. لقد أعددت الاتصال الخاص بي، ومن الغريب أنني أستطيع إدراج الأشياء بشكل جيد، ومع ذلك فإن استدعاء find على مجموعة ينتج عنه فوضى.

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));
            });
        });

    });
});

إذا قمت بإلغاء تعليق الإدراج وتعليق البحث، فإنه يعمل بشكل ممتاز. للأسف، العكس لا ينطبق، أتلقى هذا الخطأ:

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

أنا متأكد أنني أفعل شيئًا سخيفًا، ولكن للحياة لا أستطيع العثور عليه...

الإجابة رقم 1

لقد حصلت على نفس الشيء الآن. أدركت أن db.collection يتم استدعاؤه مرارًا وتكرارًا لسبب ما، لذا قمت بعمل شيء مثل هذا (أقوم بالتلاعب بشيفرتك):

    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));
           });
       });
   }

أدرك أنكم طرحتم هذا السؤال منذ 9 أشهر. آمل أن يكون حفر القبور هذا لا يزال مفيدًا لشخص ما. حظًا سعيدًا!

الإجابة رقم 2

حاول استدعاء collection.save() بعد الإدراج الخاص بك لتفريغ صفك.

ألقِ نظرة على http://www.learnboost.com/mongoose/

حاليًا يدعم Mongoose فقط تفريغ البيانات يدويًا إلى الخادم.