我无法理解为什么插入的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');
}
});
答案 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
参数会返回在集合中成功写入的文档。因此,您可以直接将它们登录到控制台,如上例所示。