MongoDBには、ドキュメントをコレクションに挿入するためのさまざまな方法が用意されています。
mongoシェルを使用するときにコレクションにドキュメントを挿入する5つの方法は次のとおりです。
insertOne() 方法
insertOne() メソッドは、単一のドキュメントをコレクションに挿入します。
そのフルネームはdb.collection.insertOne()です。 、ここでcollection ドキュメントを挿入するコレクションの名前です。
petsというコレクションにドキュメントを挿入する例を次に示します。 :
db.pets.insertOne( {
name: "Scratch",
type: "Cat"
} ) 結果:
{
"acknowledged" : true,
"insertedId" : ObjectId("5fe2d15637b49e0faf1af214")
}
db.collection.insertOne() メソッドは以下を含むドキュメントを返します:
- ブール値の
acknowledgedtrueとして 操作が書き込みの懸念またはfalseで実行された場合 書き込みの懸念が無効になっている場合。 - フィールド
insertedId_idを使用 挿入されたドキュメントの値。
insertMany() 方法
insertMany() メソッドはinsertOne()に似ています 、ただし、コレクションに複数のドキュメントを挿入します。
また、insertOne()と同様の方法で 、そのフルネームはdb.collection.insertMany()です。 、ここでcollection ドキュメントを挿入するコレクションの名前です。これは、この記事に記載されているすべての方法に適用されます。
db.collection.insertMany()の使用例を次に示します。 petsというコレクションに複数のドキュメントを挿入します :
db.pets.insertMany([
{ _id: 1, name: "Wag", type: "Dog" },
{ _id: 2, name: "Bark", type: "Dog" },
{ _id: 3, name: "Meow", type: "Cat" }
]) 結果:
{ "acknowledged" : true, "insertedIds" : [ 1, 2, 3 ] }
db.collection.insertMany() メソッドは以下を含むドキュメントを返します:
- ブール値の
acknowledgedtrueとして 操作が書き込みの懸念またはfalseで実行された場合 書き込みの懸念が無効になっている場合。 -
_idの配列 正常に挿入された各ドキュメントの値。
insert() 方法
insert() メソッドは、insertOne()の組み合わせのようなものです およびinsertMany() 。これにより、単一のドキュメントまたは複数のドキュメントをコレクションに挿入できます。
db.collection.insert()の使用例を次に示します。 単一のドキュメントを挿入するには:
db.pets.insert(
{ name: "Bruce", type: "Bat" }
) 結果:
WriteResult({ "nInserted" : 1 })
単一のドキュメントが挿入される場合、db.collection.insert() WriteResultを返します 物体。ドキュメントの配列が挿入されると、BulkWriteResultが返されます。 オブジェクト。
db.collection.insert()の使用例を次に示します。 複数のドキュメントを挿入します。
db.pets.insert([
{ _id: 1, name: "Wag", type: "Dog" },
{ _id: 2, name: "Bark", type: "Dog" },
{ _id: 3, name: "Meow", type: "Cat" }
]) 結果:
BulkWriteResult({
"writeErrors" : [ ],
"writeConcernErrors" : [ ],
"nInserted" : 3,
"nUpserted" : 0,
"nMatched" : 0,
"nModified" : 0,
"nRemoved" : 0,
"upserted" : [ ]
})
前述のように、BulkWriteResult ドキュメントの配列を挿入すると、オブジェクトが返されます。
bulkWrite() 方法
bulkWrite() メソッドを使用すると、一括書き込み操作を実行できます。
実際には、insertMany() すでに一括挿入操作を実行しています。 insert()と同じ ドキュメントの配列を挿入するとき。ただし、bulkWrite() 一括挿入、更新、削除の操作をすべて1つのメソッド呼び出しから実行できます。
例:
db.pets.bulkWrite([
{ insertOne: { "document": { "_id": 1, "name": "Bubbles", "type": "Fish" }}},
{ insertOne: { "document": { "_id": 2, "name": "Wag", "type": "Dog" }}},
{ updateOne : {
"filter" : { "_id" : 3 },
"update" : { $set : { "name" : "Fluffy", "type" : "Cat" } },
"upsert" : true
} },
{ replaceOne : {
"filter" : { "_id" : 4 },
"replacement" : { "name" : "Bite", "type" : "Dog", "weight": 5 },
"upsert" : true
} }
]) 結果:
{
"acknowledged" : true,
"deletedCount" : 0,
"insertedCount" : 2,
"matchedCount" : 0,
"upsertedCount" : 2,
"insertedIds" : {
"0" : 1,
"1" : 2
},
"upsertedIds" : {
"2" : 3,
"3" : 4
}
} この場合、コレクションは実際には存在していなかったため(前の例に従って削除しました)、コレクション内にあるドキュメントは、この例で指定されているドキュメントのみです。
コレクションを見てみましょう。
db.pets.find() 結果:
{ "_id" : 1, "name" : "Bubbles", "type" : "Fish" }
{ "_id" : 2, "name" : "Wag", "type" : "Dog" }
{ "_id" : 3, "name" : "Fluffy", "type" : "Cat" }
{ "_id" : 4, "name" : "Bite", "type" : "Dog", "weight" : 5 } 予想どおり、4つのドキュメントすべてが挿入されました。
アップサート操作
これにより、MongoDBのコレクションにドキュメントを挿入するための5番目の方法であるアップサート操作が可能になります。
これは、ドキュメントを挿入するための条件付きの方法です。アップサートは、更新操作で使用できるオプションです。指定したドキュメントがまだ存在しない場合にのみ、新しいドキュメントを挿入します。存在する場合は、元のドキュメントが更新されます(ドキュメントは挿入されません)。
アップサートの例はすでに見てきました。前の例では、"upsert" : trueを指定しました updateOneを実行するとき およびreplaceOne オペレーション。その結果、コレクションにフィルター基準に一致するドキュメントが含まれていなかったため、2つのドキュメントが挿入されました。
これがアップサートの別の例です。今回は、updateOne()で使用します メソッド。
db.pets.updateOne(
{ name: "Harry" },
{ $set: { type: "Hamster" } },
{ upsert: true }
) 結果:
{
"acknowledged" : true,
"matchedCount" : 0,
"modifiedCount" : 0,
"upsertedId" : ObjectId("5fe3dc44d991410169410524")
} ここでは、ハリーと呼ばれるすべてのペットをハムスターに設定したかったのです。しかし、ハリーと呼ばれるペットがいなかったので、アップサートが行われました。
次のメソッドはupsertを受け入れます パラメータ:
-
update() -
updateOne() -
updateMany() -
findAndModify() -
findOneAndUpdate() -
findOneAndReplace()
したがって、upsert: trueの場合 が指定されている場合、これらのメソッドは、存在しないドキュメントを更新しようとしたときにアップサート操作を実行します。