2017-01-12 53 views
0

我想更新收藏簿中的記錄。 我想創建新的字段,其名稱和值是來自變量的值。如何在python mongodb腳本中使用動態變量

for book in db.books.find(): 
    title = book['title'] 
    author, value = getAuthor(title) 
    db.dataset.update({"_id": book['_id']}, {"$set": {author: value}}) 

當我這樣做時,我得到了錯誤:WriteError:更新路徑包含一個空的字段名稱。這是不允許的,因爲兩個變量都有值。我通過將作者封入[]來搜索並解決了此問題。因此,代碼如下所示:

for book in db.books.find(): 
    title = book['title'] 
    author, value = getAuthor(title) 
    db.dataset.update({"_id": book['_id']}, {"$set": {[author]: value}}) 

但現在我得到這個錯誤,我不能夠解決: 類型錯誤:unhashable類型:「名單」

有誰也遇到過這樣的問題嗎?我該如何解決它?

回答

0

聽起來好像getAuthor()正在返回沒有它的第一個值,所以author被設置爲空。從我能看到你做的不是解決了這個錯誤,你只是把它改成了另一個錯誤。通過說[author](儘管我已經在Python中已經有一段時間了),我相信你只是試圖將鍵設置爲空列表,或者將空字符串列表作爲唯一值,具體取決於什麼author是。

如果我是你,我會打印出什麼author,或者做一些調試,並找出你從getAuthor()回來的東西。由於我看不到該代碼,也無法看到數據庫中的數據,因此我不確定如何在沒有更多信息的情況下進一步提供幫助。

+0

感謝您的回答,但正如問題中所述,兩個變量都具有價值。 getAuthor()總是返回一個值。它總是返回非空字符串。 – mark

+0

是的,但在這個問題中,你沒有解釋你是如何知道的,或者你是否僅僅是假設它。當我的一個假設是錯誤的時候,我經常會遇到奇怪的錯誤。無論哪種方式,我認爲你應該解決第一個問題,因爲'[author]'是一個列表文字,試圖將鍵設置爲列表而不是字符串。 –

+0

我debbuged它並打印所有的值,所以我看到它不是空的。我該如何解決第一個問題?除了將它封入[]還有其他的方法嗎? – mark