[解決済み] mongodb: 存在しない場合は挿入する
2022-02-17 18:37:36
質問
毎日、文書のストック(更新)が届きます。まだ存在しない項目を挿入したいのです。
- また、最初に挿入したときと、最後に更新で見たときを記録しておきたいと思います。
- ドキュメントが重複しないようにしたい。
- 以前保存した文書で、自分の更新にないものを削除したくないのですが。
- 95%(推定)のレコードが日々変更されない。
Pythonドライバ(pymongo)を使用しています。
現在私が行っていることは(擬似コード)です。
for each document in update:
existing_document = collection.find_one(document)
if not existing_document:
document['insertion_date'] = now
else:
document = existing_document
document['last_update_date'] = now
my_collection.save(document)
私の問題は、非常に遅いことです(10万件未満のレコードで40分、更新には数百万件のレコードがあります)。 私はこれを行うための組み込みの何かがあることを確信していますが、update()のためのドキュメントは、うーん......少し渋いです......。( http://www.mongodb.org/display/DOCS/Updating )
どうすれば早くできるのか、誰かアドバイスしてください。
解決方法は?
あなたはquot;upsert;をしたいようですね。 MongoDB にはこのためのサポートが組み込まれています。 update() の呼び出しに追加のパラメータを渡します。 {upsert:true} とします。 たとえば、以下のようになります。
key = {'key':'value'}
data = {'key2':'value2', 'key3':'value3'};
coll.update(key, data, upsert=True); #In python upsert must be passed as a keyword argument
これは、if-find-else-updateブロックを完全に置き換えます。 キーが存在しない場合は挿入し、存在する場合は更新します。
以前は
{"key":"value", "key2":"Ohai."}
後です。
{"key":"value", "key2":"value2", "key3":"value3"}
また、どのようなデータを書き込むかを指定することもできます。
data = {"$set":{"key2":"value2"}}
これで、選択した文書は "key2" の値のみを更新し、他のすべてをそのままにします。
関連
-
[解決済み】numpyの配列連結。"ValueError:すべての入力配列は同じ次元数でなければならない"
-
[解決済み] 与えられたキーがすでに辞書に存在するかどうかをチェックする
-
[解決済み] MongoDBに "like "を使ってクエリを実行する方法
-
[解決済み] Pythonでディレクトリが存在するかどうかを確認する方法
-
[解決済み] 変数が存在するかどうかを確認するにはどうすればよいですか?
-
[解決済み] pandasを使った "大量データ "ワークフロー【終了しました
-
[解決済み] コマンドラインからMongoDBデータベースを削除する方法を教えてください。
-
[解決済み] 2 つの日付の間にあるオブジェクトを検索する MongoDB
-
[解決済み] 別のフィールドの値を使って MongoDB のフィールドを更新する
-
[解決済み] Mongooseで文書を更新/アップサートするにはどうしたらいいですか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
Pythonの非常に便利な2つのデコレーターを解説
-
Python 人工知能 人間学習 描画 機械学習モデル作成
-
PythonによるExcelファイルの一括操作の説明
-
[解決済み] [Solved] sklearn error ValueError: 入力に NaN、infinity または dtype('float64') に対して大きすぎる値が含まれている。
-
[解決済み】ilocが「IndexError: single positional indexer is out-of-bounds」を出す。
-
[解決済み】numpyの配列連結。"ValueError:すべての入力配列は同じ次元数でなければならない"
-
[解決済み】numpy: true_divide で無効な値に遭遇
-
[解決済み】TypeErrorを取得しました。エントリを持つ子テーブルの後に親テーブルを追加しようとすると、 __init__() missing 1 required positional argument: 'on_delete'
-
[解決済み】LogisticRegression: Pythonでsklearnを使用して、未知のラベルタイプ: '連続'を使用しています。
-
[解決済み】Flask ImportError: Flask という名前のモジュールがない