MongoDB,在迭代游标

时间:2016-02-28 05:51:51

标签: mongodb

我无法理解为什么插入的MongoDB文档虽然它包含项目,但代码无法迭代。游标对象本身不为null。我可以使用db.newmongo.find()

检索文档
var url = 'mongodb://localhost:27017/test';
MongoClient.connect(url, function(err, db) {
db.collection("newmongo").insert([{"name": "XXX", "age": "50"},
                     {"name": "YYY", "age": 43},
                     {"name": "ZZZ", "age": 27},
                     {"name": "AAA", "age": 29},
                     {"name": "BBB", "age": 34}]); 

console.log("Connected correctly to server.");  
var cursor=db.collection('newmongo').find();
console.log(cursor);  // This gets logged
cursor.each(function(err, doc) {      
      if (doc != null) {
         console.log('Document found');
      } else {
         console.log('Document not found');
      }
});

1 个答案:

答案 0 :(得分:1)

您应该始终检查记录是否正确插入而没有任何错误。为此,您必须将回调传递给insert方法。像这样:

var url = 'mongodb://localhost:27017/test';
MongoClient.connect(url, function(err, db) {
if(err){
  console.log("Error connecting to MongoDB");
  return;
}
console.log("Connected correctly to server.");  
db.collection("newmongo").insert([{name: "XXX", age: 50},
                 {name: "YYY", age: 43},
                 {name: "ZZZ", age: 27},
                 {name: "AAA", age: 29},
                 {name: "BBB", age: 34}], function(err, docs){
    if(err){
        console.log("Error inserting documents in MongoDB : " + JSON.stringify(err));
    }
    if(docs){
        console.log("Following Documents were Successfully Inserted : \n" + JSON.stringify(docs));
    }
});

此外,由于这是一次async调用,因此不会等到文档插入完成后立即触发find。因此,您可能无法在newmongo集合中获取任何记录,因为写入操作仍在进行中。

所以我建议只在find条件之后调用if(docs)

我还认为调用find不是必需的,因为回调中返回的docs参数会返回在集合中成功写入的文档。因此,您可以直接将它们登录到控制台,如上例所示。

相关问题