2017-01-12 13 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:更新パスに空のフィールド名が含まれています。両方の変数に値があるため、どちらが真でないかは許可されていません。私はgoogledと[]に著者を囲むことでこの問題を解決した。だから、コードは次のようになります。

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

しかし、今、私は私が解決することはできませんよ、このエラーを取得しています: はTypeError:非ハッシュの種類:「リスト」

は、誰もがこのような問題が発生したのか?どうすれば解決できますか?

答えて

0

getAuthor()が最初の値で何も返されていないようだから、authorは何も設定されていません。 ではなく、でエラーを解決しましたが、別のエラーに変更しました。それは[author]と言うことで(私はPythonに入ってからしばらくしていますが)、空のリストにするか、空の文字列を唯一の値にするリストを設定しようとしていると思います何がauthorです。

私があなただったら、authorが何であるかを印刷したり、デバッグをしてgetAuthor()から戻ってくるものを見つけ出します。私はそのコードやデータベースのデータを見ることができないので、詳細な情報なしでさらに助けていく方法はわかりません。

+0

答えに感謝しますが、質問に記載されているように、両方の変数に価値があります。 getAuthor()は常に値を返します。常に空でない文字列を返します。 – mark

+0

はい、しかし、あなたはあなたがそれを知っているか、またはあなたがそれを前提としているかどうかを説明していません。多くの場合、私の奇妙な誤りは私の仮定の一つが間違っている時です。いずれにしても、最初の問題は '[author]'がリストリテラルなので、キーをリストにして文字列ではないので解決しなければならないと思います。 –

+0

私はそれをdebbugedと私はそれが空ではない見たので、すべての値を印刷します。どのように私は最初の問題を解決することができますか?それを[]に封じ込める以外の方法がありますか? – mark

関連する問題