Suppose I have a collection that contains the following documents:
{ "_id": 1, name: "Apple" } { "_id": 2, name: "Banana", "is_reported": null } { "_id": 3, name: "Cherry", "is_reported": false } { "_id": 4, name: "Kiwi", "is_reported": true }
Is there a simpler query to select all documents where "is_reported" is in a falsy state; that is, either non-existent, null, or false? That is, a query that selects Apple, Banana, and Cherry, but not Kiwi?
According to the MongoDB FAQ, { "is_reported": null }
will select documents where "is_reported" is either null or nonexistent, but it still doesn't select documents where "is_reported" is false.
Right now I have the following query, which works fine, but it just doesn't seem very elegant. If there are multiple fields that I need to select on, it gets messy very fast. Is there a better query that achieves the same end result?
db.fruits.find({ $or: [ { "is_reported": null }, { "is_reported": false } ] })
In MongoDB, we can check the existence of the field in the specified collection using the $exists operator. When the value of $exists operator is set to true, then this operator matches the document that contains the specified field(including the documents where the value of that field is null).
To query for is not null value, we can use the $ne operator as well as the $eq operator and specify the desired value that we want to query for. This guide aims to provide readers with different ways and examples for the same to query for is not null values in MongoDB.
MongoDB fetch documents containing 'null' If we want to fetch documents from the collection "testtable" which contains the value of "interest" is null, the following mongodb command can be used : >db. testtable. find( { "interest" : null } ).
You can do this with $in
:
db.fruits.find({is_reported: {$in: [null, false]}})
returns:
{ "_id": 1, "name": "Apple" } { "_id": 2, "name": "Banana", "is_reported": null } { "_id": 3, "name": "Cherry", "is_reported": false }
You could also flip things around logically and use $ne
if you don't have any values besides true
to exclude:
db.fruits.find({is_reported: {$ne: true}})
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With