MongoDB:ドキュメントの作成、更新、削除

「MongoDB:The Definitive Guide」Kristina ChodorowとMichael Dirolfの本を読んだ一環として、私は資料のよりよい習熟のために、章から主要なポイントを書き出すことにしました。 おそらくこれは誰かにとっても役に立つでしょう。



挿入





挿入は、MongoDBに情報を追加するための基本的な方法です。 コレクションにドキュメントを追加するには、次を実行します。



> db.foo.insert( { “bar” : “baz” } );







このような状況では、複数のドキュメントを追加する必要がある場合、挿入を高速化するために、いわゆるバッチ挿入(グループ挿入)を使用することをお勧めします



> db.foo.insert( { “arr” : [ { a : 1 , b : 1 } , { a : 2 , b : 2 } ] } );







大まかに言えば、単純に配列を挿入します。



削除する





コレクションのすべての情報は、次のように削除できます。



> db.users.remove();







これにより、コレクション自体またはインデックスが削除されることはありません。

次のようなパラメーターを使用してオブジェクトを削除できます。



> db.users.remove( { “name” : “Vasya” } );







削除はかなり簡単な操作ですが、コレクションをクリアしたい場合は、コレクション自体を削除(ドロップ)してインデックスを再作成する方が速いことがよくあります。



> db.drop_collection( “bar” );







更新する





最も単純なタイプの更新は、一致するドキュメントの完全な置換です。 そのような文書がありました:



}

"_id" : ObjectId("4b2b9f67a1f631733d917a7a"),

"name" : "joe",

"age" : 18

}








このようにすると、ドキュメント全体が置き換えられます:



> db.users.update( { “name” : ”joe” } , { “name” : “vasya” } );







つまり なります



}

"_id" : ObjectId("4b2b9f67a1f631733d917a7a"),

"name" : "vasya"

}








このリクエストの後、最初に見つかったドキュメントのみが更新されますが、マルチアップデートについては少し低くなります。



修飾子




フィールドをインクリメントする場合は、$ inc修飾子を使用します。 年齢を2年増やすには、次のようにします。



> db.users.update( { name: “joe” } , { $inc : { age: 2 } } );







キーの値を設定する必要がある場合は、$ set修飾子を使用します



> db.users.update( { name:”joe” } , { $set: { age: 25 } } );







彼はjoeという名前のドキュメントを見つけ、年齢を25に設定します。年齢キーがない場合は作成することが重要です。



キーを削除する必要がある場合は、$ unset修飾子があります



> db.users.update( { name: ”joe” } , { $unset: { age : 1 } } );







配列修飾子




$ pushを使用して、要素を配列に追加できます。 同じジョーがまだ彼の友人のリストを持っているとしましょう、このような何か:

}

"_id" : ObjectId("4b2b9f67a1f631733d917a7a"),

"name" : "joe",

"age" : 18,

“friends”: [

{name: “john”},

{name: “helen”}

]

}








友達をもっと友達に加えたい



> db.users.update( { name: “joe” } , { $push: { friends: { name: “peter” } } } );







そのようなことは、ピーターをjoe friends配列の最後に追加します。

$プッシュがある場合、$ポップが必要です。



> db.users.update( { name: ”joe” } , { $pop: { friends: 1 } } );







これにより、配列要素が末尾から削除されます。ここでは先頭から削除されます



> db.users.update( { name: ”joe” }, { $pop: { friends: -1 } } );







また、$ addToSetという便利なものがあります-$ pushと同様に機能しますが、一意性をチェックします。



何らかの基準で配列要素を削除する必要がある場合、$ pull修飾子が使用されます。



> db.users.update( { }, { $pull: { friends: { name: “john” } } } );







これにより、ジョンの友達が削除されます



位置配列修飾子




配列内の値を操作するには、特定の位置による方法と、位置演算子($記号)を使用する方法の2つがあります。



たとえば、joeの友達リストには、友達の名前だけでなく年齢も含まれているため、インデックス0の下の友達の年齢を3年増やしたいと考えています。



> db.users.update( { name: “joe” } , { $inc: { “friends.0.age” : 3 } } );







特定の友人(johnなど)の年齢を上げたいが、配列内の彼のインデックスがわからない場合、次のようにします。



> db.users.update( { “friends.name”: “john” } , { $inc: { “friends.$.age” : 3 } } );







アップサート




アップサートは特別なタイプの更新です。 使用するときに、要求された基準によるドキュメントが見つからない場合は作成され、見つかった場合は通常どおり更新されます。 upsertを使用するには、次のように、updateコマンドで3番目のパラメーターをtrueに追加するだけです。



> db.users.update( { name: “helen” } , { $set: { age: 23 } } , true );







コレクションに「helen」という名前のドキュメントがない場合は、年齢:23フィールドとともに作成されます。



複数の更新




updateコマンドを使用した以前の例はすべて、最初のドキュメントを見つけて更新しました。 複数の更新を実行するには、値trueの4番目のパラメーターを追加して更新します。



> db.users.update( { age: 18 } , { $inc: { age: 1 } } , false, true );







このクエリは18歳の全員を検索し、1ずつ増やします。



それだけです。 これらはすべて修飾子ではなく、基本的な修飾子のみです。

時間があるだろう、継続があるでしょう。



All Articles