2011-07-22 98 views
1

我的mongodb數據庫中集合中的字段類型是unicode字符串。此字段目前沒有與集合中的任何文檔關聯的任何數據。 我不希望類型是字符串,因爲我想從我的python代碼使用pymongo添加子字段。在mongodb數據庫中更改集合中字段的類型

集合中已經有很多記錄。所以,是否有可能將字段的類型更改爲Python中的字典,以用於集合中的所有文檔?

請幫助 謝謝

回答

0

當然,簡單地創建一個腳本,遍歷當前的採集,讀取現有的值,並用新的值(在你的情況下嵌入文檔)覆蓋。只需設置該字段的新值,即可更改字段的類型。例如。一個字符串字段設置爲一個整數字段:

db.test.update({領域: 「串」},{$設置:{場:23}})

1

我不知道你是什麼意思通過「字段的類型...是字符串」和「此字段...沒有任何數據」。您的意思是該字段存在於您的文檔中,但設置爲空字符串或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,確切的語法將改變一點點在外殼或其他驅動程序)

+0

感謝您的答覆。這個字段是元數據,現在當我這樣做時:s ['metadata'] ['some_date'] = datetime.utcnow(),我得到錯誤:TypeError:'unicode'對象不支持項目分配。 some_date字段不存在,即時通過我的python代碼創建它並分配datetime.utcnow()。 – James

+0

當我鍵入(s ['metadata'])時,它顯示 James

+0

在Python中,您必須用'dict'替換'['metadata']',然後才能分配給它。 MongoDB文檔在Python中用本地Python數據類型表示,例如''dict'用於文檔,'list'用於數組,''str' /'unicode','float','int' /'long'等。嘗試' s ['metadata'] = {}'然後是'['metadata'] ['sub_key'] =「sub_key的值」 – dcrosta

相關問題