nodejs – 执行IF和ELSE

必须有一个标准的方法来检查文件的存在,然后插入,如果它不存在。 这是我们都做的事情,从时间的黎明。 但是那里的例子只是显示了一半的例程。 我不明白。 所以我想出了下面的代码。 而且由于某种原因, if和执行。 该函数没有被调用两次,所以…为什么发生?

输出是:

 Connected correctly to server got doc inserted doc Disconnected from server successfully 

代码是:

 // Use connect method to connect to the Server mongoClient.connect(url, function (err, db) { assert.equal(null, err); console.log("Connected correctly to server"); var cursor = db.collection('mycoll').find(mydoc).limit(1); // i need 'each' in order to test if doc exists. // will execute once because i said limit 1. cursor.each(function (err, doc) { if (doc != null) { console.log("got doc"); } else { mydoc.date_submit = new Date(); db.collection('mycoll').insertOne(mydoc, function (err, r) { assert.equal(1, r.insertedCount); console.log("inserted doc"); db.close(); console.log('Disconnected from server successfully'); }); } }); }); 

有了if (doc != null)你可以识别循环的结束。 这意味着,即使您将结果限制为1,第一次迭代也会将您查询的文档返回给您,在第二次迭代中,游标将为空,表示这应该是循环/结果的结尾。

日志是这样的:

 Connected correctly to server got doc inserted doc Disconnected from server successfully 

因为您正在执行else语句中的asynchronous操作。

游标并不知道你在查询中的限制。