50

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

我有

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

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

我也试过

info = collection.findOne(....

但这info只是undefined(它看起来是异步的,所以我不认为这是要走的路……)

4

6 回答 6

73

未找到任何记录不是错误情况,因此您要查找的是result. 由于任何匹配的文件总是“真实的”,您可以简单地使用简单的if (result)检查。例如,

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

    if (result) {
        // we have a result
    } else {
        // we don't
    }
}
于 2012-05-11T12:36:15.757 回答
9

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

find(query).limit(1).next(function(err, doc){
   // handle data
})
于 2016-01-07T09:23:32.603 回答
5

简单来说:

collection.findOne({query}, function(err, result) {
    if (!result) {
        // Resolve your query here
    }
}
于 2014-02-17T12:09:57.180 回答
1

如今 - 从节点 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
  }
}
于 2019-03-18T20:50:38.477 回答
0

如果结果为空,则 mongo 未找到与您的查询匹配的文档。是否尝试过来自 mongo shell 的查询?

于 2012-05-11T12:37:10.673 回答
-8
collection.findOne({query}, function(err, result) {
   if (err) { /* handle err */ }

   if (result.length === 0) {
    // we don't have result
   }
}
于 2015-07-17T01:08:50.737 回答