Details
-
Bug
-
Status: Closed
-
Major - P3
-
Resolution: Fixed
-
3.0
-
None
-
None
-
mongodb 2.4.9, Ubuntu 14.04, pymongo 3.0rc0
Description
collection.find() fails when the filter dict is a defaultdict. find() adds a new key of "_id" which causes the filter to never match. This worked with pymongo 2.8.
Sample session with pymongo 3.0rc0. The filter is a defaultdict(dict) and after the find fails you can see the filter has had '_id': {} added to it.
>>> from collections import defaultdict
|
>>> import pymongo
|
>>> pymongo.version
|
'3.0rc0'
|
>>> db = pymongo.MongoClient().test
|
>>> db.test.insert({"foo": "bar"})
|
ObjectId('5515994451c3560ed8deb8fc')
|
>>> q = {"foo": "bar"}
|
>>> next(db.test.find(q), "NOTFOUND")
|
{u'_id': ObjectId('5515994451c3560ed8deb8fc'), u'foo': u'bar'}
|
>>> d = defaultdict(dict)
|
>>> d.update(q)
|
>>> next(db.test.find(d), "NOTFOUND")
|
'NOTFOUND'
|
>>> d
|
defaultdict(<type 'dict'>, {'foo': 'bar', '_id': {}})
|
A similar session with pymongo 2.8 works:
>>> from collections import defaultdict
|
>>> import pymongo
|
>>> pymongo.version
|
'2.8'
|
>>> db = pymongo.MongoClient().test
|
>>> db.test.insert({"foo": "bar"})
|
ObjectId('55159b3651c3560f70111125')
|
>>> q = {"foo": "bar"}
|
>>> next(db.test.find(q), "NOTFOUND")
|
{u'_id': ObjectId('55159b3651c3560f70111125'), u'foo': u'bar'}
|
>>> d = defaultdict(dict)
|
>>> d.update(q)
|
>>> next(db.test.find(d), "NOTFOUND")
|
{u'_id': ObjectId('55159b3651c3560f70111125'), u'foo': u'bar'}
|
>>> d
|
defaultdict(<type 'dict'>, {'foo': 'bar'})
|