nodejs - IF和ELSE都执行

时间:2016-10-03 13:35:19

标签: node.js mongodb

必须有一种标准方法来检查文档是否存在,然后在不存在的情况下插入。从时间的黎明开始,这就是我们所做的一切。但那里的例子只显示了半个例程。我不明白。所以我提出了以下代码。出于某种原因,ifelse都会执行。该功能不会被调用两次,所以...为什么会这样?

输出结果为:

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');
            });
        }
    });
});

1 个答案:

答案 0 :(得分:3)

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

日志就是这样:

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

因为您正在else语句中执行异步操作。

Cursor不知道您的查询限制。