복붙노트

[MONGODB] MongoDB의 저장 위치와 삽입의 차이점은 무엇입니까?

MONGODB

MongoDB의 저장 위치와 삽입의 차이점은 무엇입니까?

몽고 DB에 저장 및 삽입의 차이점은 무엇입니까? 모두 동일하게 보인다

db.users.save({username:"google",password:"google123"})

db.users.insert({username:"google",password:"google123"})

해결법

  1. ==============================

    1.저장 대 삽입 :

    저장 대 삽입 :

    당신의 주어진 예에서, 동작은 기본적으로 동일합니다.

    이에 "_id"매개 변수와 함께 전달 다른 경우 동작합니다 저장.

    문서가 _id가 포함되어있는 경우, 그렇지 않은 경우, _id 필드 컬렉션을 조회 upsert 것, 저장, 그것은 삽입합니다.

    업데이트 대 저장 :

    업데이트는 검색어 매개 변수와 일치하는 기존 문서를 수정합니다. 그러한 일치하는 문서가없는 경우 upsert이 사진에 올 때, 그건.

    저장 :합니까 어떤 쿼리 PARAMS을 허용하지. _id이 존재하고 같은 _id와 일치하는 문서가있는 경우, 그것을 대체합니다. 더 _id가 / 일치하는 문서를 지정하지 않을 때, 새와 같은 문서를 삽입합니다.

  2. ==============================

    2.우리가 저장 여기 두 경우를 생각해 보자 : -

    우리가 저장 여기 두 경우를 생각해 보자 : -

    1) 문서에 _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.
    

    우리가 삽입 여기 두 경우를 생각해 보자 : -

    1) 문서의 컬렉션 _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:       
    
  3. ==============================

    3.삽입 저장하거나 문서를 업데이트합니다.

    삽입 저장하거나 문서를 업데이트합니다.

    삽입은 삽입을한다.

    저장에서 제공하는 문서가 어떤 _id 필드가 없습니다 그러나 귀하의 경우, 그것은 동일한 작업을 수행합니다.

  4. ==============================

    4.예를 주어서

    예를 주어서

    애플 저장

    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를 가진 사과가없는 애플 삽입있어

    오렌지를 삽입

    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가 이미 삽입을 수행 현명 다른 존재 제공, 오브젝트 ID와 함께 제공되는 경우 업데이트로 역할을 저장합니다.

  5. ==============================

    5.이전에 같은 수집에 사용 된 ID와 "삽입"을 사용하려고하면 당신은 중복 키 오류가 발생합니다. 같은 컬렉션 이미 ID로 "저장"을 사용하는 경우, 그것은 업데이 트됩니다 / 덮어 씁니다.

    이전에 같은 수집에 사용 된 ID와 "삽입"을 사용하려고하면 당신은 중복 키 오류가 발생합니다. 같은 컬렉션 이미 ID로 "저장"을 사용하는 경우, 그것은 업데이 트됩니다 / 덮어 씁니다.

    당신이 진정한 갱신을 찾고 있다면 나는 "갱신"을 사용하는 것이 좋습니다 것입니다. 업데이트는 저장 당신이 컬렉션에 이미 동일한 ID를 사용하여 저장하는 것인지 방법으로 덮어 쓰지 않습니다.

    예를 들어, 당신은 두 개의 필드 "X"와 "Y"가 당신은 모두를 유지하지만, "X"의 값을 변경하고 싶습니다. 당신이 "저장"명령을 선택하고 한 경우 이전 값으로 Y를 포함하지 또는 저장 한 후 y는 더 이상 것 같은 값의 모든 y에이 있거나있을 수 없습니다. 당신이 $ 세트를 사용하여 업데이트 만 업데이트 문에 포함 된 X를 가지고하기로 결정하지만, 당신은 Y에 영향을주지 않습니다.

  6. ==============================

    6.당신이 여기에서 볼 수 있듯이, 저장 방법은 (는 문서를 발견하면, 갱신, 그렇지 않으면 삽입) 본질적으로 upsert을 할 것입니다 :

    당신이 여기에서 볼 수 있듯이, 저장 방법은 (는 문서를 발견하면, 갱신, 그렇지 않으면 삽입) 본질적으로 upsert을 할 것입니다 :

    http://docs.mongodb.org/manual/reference/method/db.collection.save/#db.collection.save

    삽입 그냥 직선 삽입합니다.

  7. ==============================

    7.아래의 문서를 고려

    아래의 문서를 고려

    { "_id" : 1, "domainName" : "test1.com", "hosting" : "hostgator.com" }
    

    1, 다음 : DB는 이미 _id와 문서를 포함하는 경우

    작업 저장 아래 같은 예외가 발생합니다

    E11000 duplicate key error index ...........
    

    어디에 삽입 작업으로, 단지 문서를 우선합니다.

  8. ==============================

    8.오라클의 측면에서 : 몽고 삽입 => 오라클 삽입 몽고는 => 오라클 병합을 저장

    오라클의 측면에서 : 몽고 삽입 => 오라클 삽입 몽고는 => 오라클 병합을 저장

  9. ==============================

    9.DB. .save (<문헌은>) InsertOrUpdate 조회에 상당한다.

    DB. .save (<문헌은>) InsertOrUpdate 조회에 상당한다.

    데시벨있다. 를 취소하려면 (<문헌은>) 바로 삽입 조회에 상당한다.

  10. from https://stackoverflow.com/questions/16209681/what-is-the-difference-between-save-and-insert-in-mongo-db by cc-by-sa and MIT license