Mongo DBでの保存と挿入の違いは何ですか? どっちも同じに見える
db.users.save({username:"google",password:"google123"})
db.users.insert({username:"google",password:"google123"})
Mongo DBでの保存と挿入の違いは何ですか? どっちも同じに見える
db.users.save({username:"google",password:"google123"})
db.users.insert({username:"google",password:"google123"})
ここで、save の 2 つのケースを考えてみましょう:-
1) doc に _id を持つ。
2) ドキュメントに _id がありません。
Save ()
/ \
/ \
Having _id Not Having _id
->In this case save will do -> It will do normal insertion
upsert to insert.Now in this case as insert() do.
what that means, it means
take the document and replace
the complete document having same
_id.
ここで挿入の 2 つのケースを考えてみましょう:-
1) コレクションに doc の _id を持つ。
2) コレクションにドキュメントの _id がありません。
Insert()
/ \
/ \
Doc Having _id in collection Doc Not Having _id
-> E11000 duplicate key ->Insert a new doc inside the collection.
error index:
例を挙げると
りんごを救う
db.fruit.save({"name":"apple", "color":"red","shape":"round"})
WriteResult({ "nInserted" : 1 })
db.fruit.find();
{
"_id" : ObjectId("53fa1809132c1f084b005cd0"),
"color" : "red",
"shape" : "round",
"name" : "apple"
}
以前に保存されたリンゴの _id でリンゴを保存します
db.fruit.save(
{"_id" : ObjectId("53fa1809132c1f084b005cd0"),"name":"apple",
"color":"real red","shape":"round"})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
保存したリンゴの色が赤から真の赤に更新されました
db.fruit.find();
{
"_id" : ObjectId("53fa1809132c1f084b005cd0"),
"color" : "real red",
"shape" : "round",
"name" : "apple"
}
_id でリンゴを保存する
db.fruit.save({"_id" : ObjectId("55551809132c1f084b005cd0"),
"name":"apple", "color":"real red","shape":"round"})
WriteResult({ "nMatched" : 0, "nUpserted" : 1,
"nModified" : 0, "_id": 55551809132c1f084b005cd0 })
更新を行うための同じオブジェクト ID を持つ Apple がないため、Apple が挿入されました
オレンジを入れる
db.fruit.insert({"name":"orange", "color":"orange","shape":"round"})
WriteResult({ "nInserted" : 1 })
オレンジが挿入されています
db.fruit.find();
{
"_id" : ObjectId("53fa1809132c1f084b005cd0"),
"color" : "real red",
"shape" : "round",
"name" : "apple"
}
{
"_id" : ObjectId("53fa196d132c1f084b005cd7"),
"color" : "orange",
"shape" : "round",
"name" : "orange"
}
{
"_id" : ObjectId("55551809132c1f084b005cd0"),
"color" : "real red",
"shape" : "round",
"name" : "apple"
}
そのため、オブジェクト ID が指定されている場合、save は更新として機能します。オブジェクト ID が既に存在している場合、それ以外の場合は挿入が行われます。
ORACLE に関して: mongo insert => Oracle insert mongo save => Oracle merge
db.<collection_name>.save(<Document>)
InsertOrUpdate クエリと同等です。
一方、db.<collection_name>.insert(<Document>)
挿入クエリと同等です。