我的mongodb數據庫中集合中的字段類型是unicode字符串。此字段目前沒有與集合中的任何文檔關聯的任何數據。 我不希望類型是字符串,因爲我想從我的python代碼使用pymongo添加子字段。在mongodb數據庫中更改集合中字段的類型
集合中已經有很多記錄。所以,是否有可能將字段的類型更改爲Python中的字典,以用於集合中的所有文檔?
請幫助 謝謝
我的mongodb數據庫中集合中的字段類型是unicode字符串。此字段目前沒有與集合中的任何文檔關聯的任何數據。 我不希望類型是字符串,因爲我想從我的python代碼使用pymongo添加子字段。在mongodb數據庫中更改集合中字段的類型
集合中已經有很多記錄。所以,是否有可能將字段的類型更改爲Python中的字典,以用於集合中的所有文檔?
請幫助 謝謝
當然,簡單地創建一個腳本,遍歷當前的採集,讀取現有的值,並用新的值(在你的情況下嵌入文檔)覆蓋。只需設置該字段的新值,即可更改字段的類型。例如。一個字符串字段設置爲一個整數字段:
db.test.update({領域: 「串」},{$設置:{場:23}})
我不知道你是什麼意思通過「字段的類型...是字符串」和「此字段...沒有任何數據」。您的意思是該字段存在於您的文檔中,但設置爲空字符串或null
?
無論哪種情況,MongoDB都是「無模式的」,這意味着它不會在您的文檔上實施任何特定模式,甚至不會集合中的所有文檔具有相同的結構。
如果您使用的框架需要您聲明模式(MongoEngine,mongokit等),那麼您必須根據您對框架的使用情況進行相應更改,並且需要知道哪些框架你正在使用。
如果您只是使用純pymongo,您可以根據需要更改文檔。假設你有一個這樣的文件:
{name: "dcrosta", address: null }
而且你想address
子文檔。你可以做到這一切在一個單一的更新:
db.people.update({address: None}, {'$set': {'address': {
'street1': None,
'street2': None,
'city': None,
'state': None,
'zip': None,
}}}, multi=True)
(這是pymongo,確切的語法將改變一點點在外殼或其他驅動程序)
感謝您的答覆。這個字段是元數據,現在當我這樣做時:s ['metadata'] ['some_date'] = datetime.utcnow(),我得到錯誤:TypeError:'unicode'對象不支持項目分配。 some_date字段不存在,即時通過我的python代碼創建它並分配datetime.utcnow()。 – James
當我鍵入(s ['metadata'])時,它顯示 –
James
在Python中,您必須用'dict'替換'['metadata']',然後才能分配給它。 MongoDB文檔在Python中用本地Python數據類型表示,例如''dict'用於文檔,'list'用於數組,''str' /'unicode','float','int' /'long'等。嘗試' s ['metadata'] = {}'然後是'['metadata'] ['sub_key'] =「sub_key的值」 – dcrosta