Mongo conditional for "key doesn't exist"?


I want to find a document using a conditional if the key == None or if the key doesn't exist. Something like this:

myDoc = self.request.root.db.myDocs.find_one({
                          '$or': [
                              {'myKey' : $doesNotExist } ,
                              {'myKey' : None }

I'd also like to be able to find a document just by a missing key like this:

myDoc = self.request.root.db.myDocs.find_one( {'myKey' : $doesNotExist } )

How can I accomplish this?

8/19/2012 10:26:06 PM

Accepted Answer

For "if key exists" checks, using a .find() is significantly faster than find_one().

Single document: cursor = db.myDocs.find({"mykey": {"$exists": True}}).limit(1)

Multiple documents: cursor = db.myDocs.find({"mykey": {"$exists": True}})

if cursor.count() > 0:
    keyExists = True
    keyExists = False
3/18/2013 9:31:23 PM

You can test for a key not existing with:

db.myDocs.find_one({'myKey': { '$exists': False }})

Mongo documentation about the $exists operator

Licensed under: CC-BY-SA with attribution
Not affiliated with: Stack Overflow