虽然计数是积极的,但不能打印收集中的所有元素

时间:2013-10-13 08:54:08

标签: node.js mongodb

我可以在集合中获得积极的元素......

var collection;

collection = db.collection("allCodes");

collection.count(function(err, count) {
  if (err) {
    throw err;
  }
  console.log("There are " + count + " records.");
});

...带输出:

Connected to Database ok
There are 354 records.

...但无法获取此集合中的元素:

collection.find().each(function(err, doc) {
  if (err) {
    throw err;
  }
  console.log("each doc");
  console.log(doc);
});

......它什么都不打印。我是mongodb的新手。那么我做错了什么?我想在allCodes集合中打印所有元素。

更新:所有插入数据的代码都会被计算,然后尝试自己获取数据,但什么都没有出来。

var MongoClient, collection;

MongoClient = require("mongodb").MongoClient;
var objectToInsert = [{
    'a': 1
}, {
    'a': 2
}, {
    'b': 3
}]
MongoClient.connect("mongodb://127.0.0.1:27017/test", function(err, db) {
    console.log("Connected to Database");
    collection = db.collection("test2");
    // clear collection -------------------------------
    collection.remove(function(err, result) {
        // insert ------------------------------------
        collection.insert(objectToInsert, function(docs) {
            // count - ok -----------------------------------
            collection.count(function(err, count) {

                console.log("Count: " + count);
                // find - fail - no objects printed -----------------------
                collection.find().toArray(function(err, docs) {
                    console.log("Printing docs from Array");
                    docs.forEach(function(doc) {
                        console.log("Doc from array");
                        console.log(doc);
                    });
                });
                db.close();

            });

        });
    });
});

它有输出:

Connected to Database
Count: 3

为什么我只算数。我的数据在哪里?

2 个答案:

答案 0 :(得分:2)

find有机会完成之前,您已关闭与数据库的连接。

db.close()调用移到toArray的回调中,如下所示:

collection.find().toArray(function(err, docs) {
    console.log("Printing docs from Array");
    docs.forEach(function(doc) {
        console.log("Doc from array");
        console.log(doc);
    });
    db.close();
});

答案 1 :(得分:0)

  

免责声明:我根本不熟悉

example in the documentation开始,您似乎需要先创建一个游标对象,然后再遍历结果。我不确定链接命令的注意事项。

var cursor = collection.find();

// Execute the each command, triggers for each document
cursor.each( function( err, item ) {
  console.log( "each doc" );
});