2016-02-28 2 views
0

Я не могу понять, почему вставленный документ MongoDB, хотя он содержит элементы, код не может перебирать. Сам объект курсора не равен нулю. Я могу получить документы с помощью db.newmongo.find()MongoDB, выдавать при повторении курсора

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

Почему это дубликат? Поскольку еще один человек, использующий асинхронный вызов типа '.insert()', но затем пытается найти этот результат сразу после этого **, без ** «Ввод кода, который следует за этой операцией ** внутри **, обратный вызов для этой операции ». Вы используете синхронные методы кодирования с асинхронными функциями. Понять эти вызовы не блокировать до завершения до того, как будут запущены следующие строки кода. Callbacks. –

+0

Похоже, что есть ошибка в документе JSON, который вы пытаетесь вставить –

ответ

1

Вы всегда должны проверить, если записи были вставлены правильно без ошибок. Для этого вы должны передать обратный вызов методу вставки. Что-то вроде этого:

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, который был возвращен в обратном вызове, вернет документы, успешно записанные в вашей коллекции. Таким образом, вы можете напрямую зарегистрировать их на консоли, как показано в приведенном выше примере.

Смежные вопросы