我正在使用带节点的npm mongodb
驱动程序。
我有
collection.findOne({query}, function(err, result) {
//do something
}
问题是我没有任何结果,err
仍然是null
我是否找到了结果。我怎么知道查询没有找到结果?
我也试过
info = collection.findOne(....
但是info
只是undefined
(它看起来是异步的,所以我认为不管怎么样......)
答案 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
}
}