MongoDB Node找到了如何处理没有结果?

时间:2012-05-11 12:26:40

标签: node.js mongodb

我正在使用带节点的npm mongodb驱动程序。

我有

collection.findOne({query}, function(err, result) {
    //do something
}

问题是我没有任何结果,err仍然是null我是否找到了结果。我怎么知道查询没有找到结果?

我也试过

info = collection.findOne(....

但是info只是undefined(它看起来是异步的,所以我认为不管怎么样......)

6 个答案:

答案 0 :(得分:68)

找不到任何记录不是错误条件,因此您要查找的是result中缺少值。由于任何匹配的文档总是“真实的”,您可以简单地使用简单的if (result)检查。如,

collection.findOne({query}, function(err, result) {
    if (err) { /* handle err */ }

    if (result) {
        // we have a result
    } else {
        // we don't
    }
}

答案 1 :(得分:10)

以下所有这些答案都已过时。 findOne是deprecated。最新的2.1文档建议使用

find(query).limit(1).next(function(err, doc){
   // handle data
})

答案 2 :(得分:4)

简单地说:

collection.findOne({query}, function(err, result) {
    if (!result) {
        // Resolve your query here
    }
}

答案 3 :(得分:0)

如果result为null,则mongo找不到与您的查询匹配的文档。是否尝试过mongo shell的查询?

答案 4 :(得分:0)

如今-从node 8开始-您可以在async函数中执行此操作:

async function func() {
  try {
    const result = await db.collection('xxx').findOne({query});
    if (!result) {
      // no result
    } else {
      // do something with result
    }
  } catch (err) {
    // error occured
  }
}

答案 5 :(得分:-8)

collection.findOne({query}, function(err, result) {
   if (err) { /* handle err */ }

   if (result.length === 0) {
    // we don't have result
   }
}