Mongo conditional for "key doesn't exist"?

zakdances picture zakdances · Aug 20, 2012 · Viewed 17k times · Source

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?

Answer

Sagar Hatekar picture Sagar Hatekar · Mar 18, 2013

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
else:
    keyExists = False