0

我可以得到集合中元素的正数......

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

所以为什么我只有数。我的数据在哪里?

4

2 回答 2

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();
});
于 2013-10-13T14:11:39.257 回答
0

免责声明:我根本不熟悉

文档中的示例看来,您似乎需要先创建一个游标对象,然后才对结果进行迭代。我不确定链接命令有什么注意事项。

var cursor = collection.find();

// Execute the each command, triggers for each document
cursor.each( function( err, item ) {
  console.log( "each doc" );
});
于 2013-10-13T08:59:47.757 回答