복붙노트

[MONGODB] .save () 및 업데이트를 사용 몽구스 간의 차이 ()

MONGODB

.save () 및 업데이트를 사용 몽구스 간의 차이 ()

몽구스의 기존 항목에서 필드를 수정하려면, 사용의 차이 무엇인가

model = new Model([...])
model.field = 'new value';
model.save();

Model.update({[...]}, {$set: {field: 'new value'});

여러 사용자가 동시에 요청을 보낼 때 예기치 않은 행동 - NodeJS와 몽고 : 나는이 질문을 부탁 해요 이유 때문에 누군가는 I 어제 게시 된 문제에 대한 제안입니다. 사람은 사용 업데이트에 대신 저장 제안, 나는 아직 완전히 확인이 차이를 만들 이유가 아니에요.

감사!

해결법

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

    1.처음 두 개념. 응용 프로그램이 MongoDB를이 서버이며, 클라이언트입니다.

    처음 두 개념. 응용 프로그램이 MongoDB를이 서버이며, 클라이언트입니다.

    가장 큰 차이점은 .save ()로 이미 클라이언트 측 코드에서 개체를가하거나 다시 작성하기 전에 서버에서 데이터를 검색해야한다고, 당신은 전체를 다시 쓰고있다.

    반면 .update를에 () 서버에서 클라이언트에로드 할 데이터가 필요하지 않습니다. 상호 작용의 모든 기존 문서에 내용을 추가하는이 방법은 매우 효과적 일 수있는 client.So의 .update를 ()에 검색하지 않고 서버 측을 발생합니다.

    또한, 행동이 쿼리 조건과 일치하는 하나 개 이상의 문서에서 수행 할 수 .update를에 다중 매개 변수 ()가있다.

    이 전화로 .update를 ()를 사용할 때 느슨한 것을 편리한 메소드에서 몇 가지가 있지만, 특정 작업에 대한 혜택은 "트레이드 오프"당신이 곰을 가지고있다. 이에 대한 자세한 내용 및 사용할 수있는 옵션에 대한 설명서를 참조하십시오.

    짧은 .save ()에서 .update를 () 서버 측에서 클라이언트 측 인터페이스이다.

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

    2.약간의 차이 :

    약간의 차이 :

  3. ==============================

    3.미들웨어라는 몽구스에 유용한 기능이있다. '이전'과 '이후'미들웨어가 있습니다. 당신은 '저장'할 때 미들웨어는 있지만 '갱신'동안 실행하세요. 암호가 수정 사용자 스키마마다에 암호를 해시하려는 경우 예를 들어, 당신은으로 다음 수행 할 사전을 사용할 수 있습니다. 또 다른 유용한 예제는 각 문서의과 lastModified을 설정하는 것입니다. 문서는 http://mongoosejs.com/docs/middleware.html에서 찾을 수 있습니다

    미들웨어라는 몽구스에 유용한 기능이있다. '이전'과 '이후'미들웨어가 있습니다. 당신은 '저장'할 때 미들웨어는 있지만 '갱신'동안 실행하세요. 암호가 수정 사용자 스키마마다에 암호를 해시하려는 경우 예를 들어, 당신은으로 다음 수행 할 사전을 사용할 수 있습니다. 또 다른 유용한 예제는 각 문서의과 lastModified을 설정하는 것입니다. 문서는 http://mongoosejs.com/docs/middleware.html에서 찾을 수 있습니다

    UserSchema.pre('save', function(next) {
    var user = this;
    // only hash the password if it has been modified (or is new)
    if (!user.isModified('password')) {
        console.log('password not modified');
        return next();
    }
    console.log('password modified');
    // generate a salt
    bcrypt.genSalt(10, function(err, salt) {
        if (err) {
            return next(err);
        }
    
        // hash the password along with our new salt
        bcrypt.hash(user.password, salt, function(err, hash) {
            if (err) {
                return next(err);
            }
            // override the cleartext password with the hashed one
            user.password = hash;
            next();
        });
    });
    });
    
  4. ==============================

    4.가볍게해서는 안 한 세부 : 동시성

    가볍게해서는 안 한 세부 : 동시성

    앞서 언급 한 바와 같이 doc.save ()를 수행 할 때, 당신은) 다음 (doc.save, 마침내 그것을 수정하고, 먼저 MongoDB를 서버에 변경 사항을 메모리에 문서를로드해야합니다.

    문제는 문서가 동시에 그런 식으로 편집 할 때 발생한다 :

    Model.updateOne ()와 같은 원자를 조작 할 때의 동작은 동시성 제어 어느 정도 MongoDB를 수행하는 서버에 전적으로 수행되므로 동시성은 문제가되지 않는다.

    따라서, 조심!

  5. from https://stackoverflow.com/questions/22278761/mongoose-difference-between-save-and-using-update by cc-by-sa and MIT license