pymongoを使って値を更新するには?
2023-11-05 15:33:20
質問
このフォームにmongodbのコレクションを持っています。
{id=ObjectId(....),key={dictionary of values}}
where dictionary of values is {'a':'1','b':'2'.....}
値の辞書を
'd'
.
のキーの値を更新する必要があります。
'd'
.
すなわち、私は
'a':'1'
を
'a':'2'
pymongoでこれを行うにはどうしたらよいでしょうか?
コードはこのような感じです。
productData is a collection in mongoDB
for p in productData.find():
for k,v in p.iteritems():
value=v['a']
value=value+1
v['a']=value
ここで、productDataに新しい値を反映させます。
これは私が試したもので、新しいキーと値のペアを導入し、更新する代わりに
for p in productData.find():
for k,v in p.iteritems():
value=v['a']
value=value+1
v['a']=value
productData.update({'_id':mongoId},{"$set":{'d.a':'100'}},upsert=False)
どのように解決するのですか?
ドキュメントの値を任意の値に設定したい場合、$set 構文を使用することができます。これは、その属性がすでに文書に存在する場合は値を更新し、存在しない場合は作成します。あなたが説明したように、辞書の中の単一の値を設定する必要がある場合、ドット記法を使用して子値にアクセスすることができます。
pが取得したオブジェクトの場合。
existing = p['d']['a']
pymongo バージョン 3.0 の場合。
db.ProductData.update({
'_id': p['_id']
},{
'$set': {
'd.a': existing + 1
}
}, upsert=False, multi=False)
pymongo バージョン >= 3.0 用。
db.ProductData.update_one({
'_id': p['_id']
},{
'$set': {
'd.a': existing + 1
}
}, upsert=False)
しかし、単に値を増加させるだけなら、この方法は複数のリクエストが同時に実行されたときに問題を引き起こすかもしれません。代わりに、$inc構文を使用する必要があります。
pymongoのバージョン3.0用です。
db.ProductData.update({
'_id': p['_id']
},{
'$inc': {
'd.a': 1
}
}, upsert=False, multi=False)
pymongo バージョン >= 3.0 用です。
db.ProductData.update_one({
'_id': p['_id']
},{
'$inc': {
'd.a': 1
}
}, upsert=False)
これにより、インクリメントが必ず発生するようになります。
関連
-
[解決済み] プログラムの実行やシステムコマンドの呼び出しはどのように行うのですか?
-
[解決済み] 関数内でグローバル変数を使用する
-
[解決済み] 列の値に基づいてDataFrameから行を選択するにはどうすればよいですか?
-
[解決済み] 環境変数の値にアクセスする方法
-
[解決済み] 与えられたキーがすでに辞書に存在するかどうかをチェックする
-
[解決済み] pandasを使った "大量データ "ワークフロー【終了しました
-
[解決済み】forループを使った辞書の反復処理
-
[解決済み】2つの辞書を1つの式でマージする(辞書の和をとる)には?)
-
[解決済み] Pythonの構文に新しいステートメントを追加することはできますか?
-
[解決済み] Pythonによる一対のクロスプロダクト [重複] (英語)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] DataFrameの文字列、dtypeがobjectの場合
-
[解決済み] 2つの線分が交差しているかどうかを確認するにはどうすればよいですか?
-
[解決済み] 小数点以下1桁を取得する[重複]。
-
[解決済み] タプルのリストを複数のリストに変換するには?
-
[解決済み] Pythonのインスタンス変数とクラス変数
-
[解決済み] virtualenv の `--no-site-packages` オプションを元に戻す。
-
[解決済み] Python Empty Generator 関数
-
[解決済み] virtualenvsはどこに作成するのですか?
-
[解決済み] 新しいpip backtrackingの実行時問題の解決
-
[解決済み] Mongo のドキュメントを挿入した後、どのように更新しますか?