Mongo DB에 저장과 삽입의 차이점은 무엇입니까?
Mongo DB에 저장과 삽입의 차이점은 무엇입니까? 둘 다 같아 보입니다.
db.users.save({username:"google",password:"google123"})
db.users.insert({username:"google",password:"google123"})
저장과 삽입:
위의 예에서 동작은 기본적으로 동일합니다.
save
는, 「_id」파라미터와 함께 전달되면, 다른 동작을 합니다.
저장, 문서에 다음 항목이 포함된 경우_id
의 수집에 대한 쿼리를 업합니다._id
필드, 그렇지 않으면 삽입됩니다.
지정된 _id 값을 가진 문서가 존재하지 않는 경우 save() 메서드는 문서에 지정된 필드를 사용하여 삽입을 수행합니다.
지정된 _id 값을 가진 문서가 있는 경우 save() 메서드는 기존 레코드의 모든 필드를 문서의 필드로 대체하여 업데이트를 수행합니다.
저장과 업데이트:
update
쿼리 매개 변수와 일치하는 기존 문서를 수정합니다.일치하는 문서가 없는 경우,upsert
그림으로 나타나다.
upsert : false
: 해당 문서가 존재하지 않으면 아무 일도 일어나지 않습니다.upsert : true
: 쿼리 매개 변수 및 업데이트 매개 변수와 동일한 내용으로 새 문서가 생성됩니다.
save
: 쿼리 매개 변수를 허용하지 않습니다.한다면_id
존재하며 동일한 문서를 가진 일치하는 문서가 있습니다._id
, 이 대체됩니다._id가 지정되지 않았거나 일치하는 문서가 없는 경우 문서를 새 문서로 삽입합니다.
저장하기 위해 여기서 두 가지 경우를 고려하겠습니다.-
1) _id in doc.
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.
여기에 있는 두 가지 사례를 삽입에 대해 생각해 보겠습니다.-
1) 컬렉션에 _id of doc가 있습니다.
2) 컬렉션에 _id of doc가 없습니다.
Insert()
/ \
/ \
Doc Having _id in collection Doc Not Having _id
-> E11000 duplicate key ->Insert a new doc inside the collection.
error index:
save
문서를 삽입하거나 업데이트합니다.
insert
는 삽입만 합니다.
그러나 당신의 경우, 저장에 제공된 문서에는 동일한 기능이 없습니다._id
들판.
예를 들어
Apple 저장
db.fruit.save({"name":"apple", "color":"red","shape":"round"})
WriteResult({ "nInserted" : 1 })
db.fruit.find();
{
"_id" : ObjectId("53fa1809132c1f084b005cd0"),
"color" : "red",
"shape" : "round",
"name" : "apple"
}
이전에 저장한 apple의 _id를 사용하여 apple 저장
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로 "삽입"을 사용하려고 하면 중복 키 오류가 발생합니다.동일한 컬렉션에 이미 있는 ID에 "저장"을 사용하면 업데이트/덮어쓰기됩니다.
진정한 업데이트를 원하신다면 "update"를 사용하는 것이 좋습니다.컬렉션에 이미 있는 동일한 ID를 사용하여 저장하는 경우, 업데이트는 저장 방식으로 덮어쓰지 않습니다.
예를 들어 두 개의 필드 "x"와 "y"가 있고 둘 다 유지하되 "x" 값은 변경하려고 합니다."save" 명령을 선택하고 이전 값과 함께 y를 포함하지 않거나 저장에 y가 전혀 없는 경우 y는 더 이상 같은 값을 가지지 않게 됩니다.그러나 $set을 사용하여 업데이트를 선택하고 업데이트 스테이트먼트에 x만 포함하면 y에 영향을 주지 않습니다.
여기서 알 수 있듯이 저장 방법은 기본적으로 업서트(doc를 찾으면 업데이트, 그렇지 않으면 삽입)를 수행합니다.
http://docs.mongodb.org/manual/reference/method/db.collection.save/ #db.collection.save
인서트는 스트레이트 인서트입니다.
다음 문서를 참고하십시오.
{ "_id" : 1, "domainName" : "test1.com", "hosting" : "hostgator.com" }
db에 _id:1의 문서가 이미 포함되어 있는 경우
저장 작업은 다음과 같은 예외를 발생시킵니다.
E11000 duplicate key error index ...........
여기서 insert 조작은 문서를 덮어씁니다.
ORACLE의 경우 : mongo insert = > Oracle insert mongo save = > Oracle merge
db.<collection_name>.save(<Document>)
Insert Or Update 리리 。
는안 while while while while 、db.<collection_name>.insert(<Document>)
[ Insert Query ]조회 삽입
언급URL : https://stackoverflow.com/questions/16209681/what-is-the-difference-between-save-and-insert-in-mongo-db
'programing' 카테고리의 다른 글
스크립트 입력 onchange event.target.value (0) | 2023.03.21 |
---|---|
JSON에서 큰따옴표를 피하는 방법 (0) | 2023.03.21 |
Spring JPA를 사용하여 엔티티의 선택된 속성만 가져오려면 어떻게 해야 합니까? (0) | 2023.03.21 |
PL/SQL ORA-01422: 정확한 가져오기가 요청된 행 수보다 많은 행을 반환합니다. (0) | 2023.03.21 |
컨트롤러를 글로벌하게 정의하면서 컨트롤러가 함수가 아니라 정의되지 않았습니다. (0) | 2023.03.21 |