Reputation: 75945
Im using the npm mongodb
driver with node.
I have
collection.findOne({query}, function(err, result) {
//do something
}
The problem is say I dont have any results, err
is still null
whether I find a result or don't. How would I know that there were no results found with the query?
I've also tried
info = collection.findOne(....
But the info
is just undefined
(it looked asynchronous so I didn't think it was the way to go anyway..)
Upvotes: 54
Views: 55604
Reputation: 927
nowadays - since node 8 - you can do this inside an async
function:
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
}
}
Upvotes: 4
Reputation: 9206
All of these answers below are outdated. findOne is deprecated. Lastest 2.1 documentation proposes to use
find(query).limit(1).next(function(err, doc){
// handle data
})
Upvotes: 9
Reputation: 2186
collection.findOne({query}, function(err, result) {
if (err) { /* handle err */ }
if (result.length === 0) {
// we don't have result
}
}
Upvotes: -9
Reputation: 14734
Simply as:
collection.findOne({query}, function(err, result) {
if (!result) {
// Resolve your query here
}
}
Upvotes: 5
Reputation: 5322
If result is null then mongo didn't find a document matching your query. Have tried the query from the mongo shell?
Upvotes: 0
Reputation: 39649
Not finding any records isn't an error condition, so what you want to look for is the lack of a value in result
. Since any matching documents will always be "truthy", you can simply use a simple if (result)
check. E.g.,
collection.findOne({query}, function(err, result) {
if (err) { /* handle err */ }
if (result) {
// we have a result
} else {
// we don't
}
}
Upvotes: 77