내 MongoDB의 문서에 defaultdict 변수를 쓰려고합니다. 그 밖의 모든 것들은 훌륭합니다. 단지이 속성이 아닙니다. 기괴합니다! 나는 '도메인'이라고 불리는 다소 큰 defaultdict를 설정하고 있습니다.
>>> type(domains)
<type 'collections.defaultdict'>
그것의 꽤 큰, 약 3MB :
>>> db.AggregateResults.find_one({'date':'20110409'}).keys()
[u'res', u'date', u'_id']
:
>>> sys.getsizeof(domains)
3146008
여기에 우리가 그것을 설정합니다 문서의
그래서 여기 내 defaultdict의 :이 단자 출력을 확인
해당 문서의 ID를 가져 가자.
>>> myID = db.AggregateResults.find_one({'date':'20110409'})['_id']
>>> myID
ObjectId('50870847f49a00509a000000')
대,의이 속성을 설정할 수 있습니다 :
>>> db.AggregateResults.update({'_id':myID}, {"$set": {'domains':domains}})
>>> db.AggregateResults.find_one({'date':'20110409'}).keys()
[u'res', u'date', u'_id']
EH을? 그것은 저장하지 않았다 ??
음 ... 아무 것도 저장하지 않습니까?
>>> db.AggregateResults.update({'_id':myID}, {"$set": {'myTest':'hello world'}})
>>> db.AggregateResults.find_one({'date':'20110409'}).keys()
[u'myTest', u'res', u'date', u'_id']
좋아요 ... 그럼 괜찮아요 ... 아마도 MongoDB가 defaultdicts를 좋아하지 않기 때문에 그럴 수 있습니다. 시도해 봅시다 :
>>> myDD = defaultdict(int)
>>> myDD['test'] = 1
>>> myDD
defaultdict(<type 'int'>, {'test': 1})
>>> db.AggregateResults.update({'_id':myID}, {"$set": {'myDD':myDD}})
>>> db.AggregateResults.find_one({'date':'20110409'}).keys()
[u'myTest', u'res', u'date', u'myDD', u'_id']
그래서 이걸 저장하지 않아도 괜찮습니까?
이상해! 어떤 아이디어? 와
EDIT 진정한 = 안전 :
>>> db.AggregateResults.update({'_id':myID}, {"$set": {'domains':domains}}, safe=True)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib64/python2.6/site-packages/pymongo-2.1.1_-py2.6-linux-x86_64.egg/pymongo/collection.py", line 405, in update
_check_keys, self.__uuid_subtype), safe)
File "/usr/lib64/python2.6/site-packages/pymongo-2.1.1_-py2.6-linux-x86_64.egg/pymongo/connection.py", line 796, in _send_message
return self.__check_response_to_last_error(response)
File "/usr/lib64/python2.6/site-packages/pymongo-2.1.1_-py2.6-linux-x86_64.egg/pymongo/connection.py", line 746, in __check_response_to_last_error
raise OperationFailure(error["err"], error["code"])
pymongo.errors.OperationFailure: not okForStorage
This GoogleGroup discussion 그 때문에 키에은 마침표를 데 수 말한다 :하지만,
>>> [x for x in domains.keys() if '.' in x]
[]
가이 코드를 통해 실행 시도 (또는 프로세스, 나는 코드 그것을 가까운 테스트를 제공하기를 복사/붙여 넣기하지 않았다)와 모든 것이 나를 위해 일한, 나는 확실하지 않다 무엇을 너의 시도 도중 일어났다. – ACE
지금 알았습니다. 걱정하지 마십시오. – LittleBobbyTables