[MONGODB] .save () 및 업데이트를 사용 몽구스 간의 차이 ()
MONGODB.save () 및 업데이트를 사용 몽구스 간의 차이 ()
몽구스의 기존 항목에서 필드를 수정하려면, 사용의 차이 무엇인가
model = new Model([...])
model.field = 'new value';
model.save();
이
Model.update({[...]}, {$set: {field: 'new value'});
여러 사용자가 동시에 요청을 보낼 때 예기치 않은 행동 - NodeJS와 몽고 : 나는이 질문을 부탁 해요 이유 때문에 누군가는 I 어제 게시 된 문제에 대한 제안입니다. 사람은 사용 업데이트에 대신 저장 제안, 나는 아직 완전히 확인이 차이를 만들 이유가 아니에요.
감사!
해결법
-
==============================
1.처음 두 개념. 응용 프로그램이 MongoDB를이 서버이며, 클라이언트입니다.
처음 두 개념. 응용 프로그램이 MongoDB를이 서버이며, 클라이언트입니다.
가장 큰 차이점은 .save ()로 이미 클라이언트 측 코드에서 개체를가하거나 다시 작성하기 전에 서버에서 데이터를 검색해야한다고, 당신은 전체를 다시 쓰고있다.
반면 .update를에 () 서버에서 클라이언트에로드 할 데이터가 필요하지 않습니다. 상호 작용의 모든 기존 문서에 내용을 추가하는이 방법은 매우 효과적 일 수있는 client.So의 .update를 ()에 검색하지 않고 서버 측을 발생합니다.
또한, 행동이 쿼리 조건과 일치하는 하나 개 이상의 문서에서 수행 할 수 .update를에 다중 매개 변수 ()가있다.
이 전화로 .update를 ()를 사용할 때 느슨한 것을 편리한 메소드에서 몇 가지가 있지만, 특정 작업에 대한 혜택은 "트레이드 오프"당신이 곰을 가지고있다. 이에 대한 자세한 내용 및 사용할 수있는 옵션에 대한 설명서를 참조하십시오.
짧은 .save ()에서 .update를 () 서버 측에서 클라이언트 측 인터페이스이다.
-
==============================
2.약간의 차이 :
약간의 차이 :
-
==============================
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.가볍게해서는 안 한 세부 : 동시성
가볍게해서는 안 한 세부 : 동시성
앞서 언급 한 바와 같이 doc.save ()를 수행 할 때, 당신은) 다음 (doc.save, 마침내 그것을 수정하고, 먼저 MongoDB를 서버에 변경 사항을 메모리에 문서를로드해야합니다.
문제는 문서가 동시에 그런 식으로 편집 할 때 발생한다 :
Model.updateOne ()와 같은 원자를 조작 할 때의 동작은 동시성 제어 어느 정도 MongoDB를 수행하는 서버에 전적으로 수행되므로 동시성은 문제가되지 않는다.
따라서, 조심!
from https://stackoverflow.com/questions/22278761/mongoose-difference-between-save-and-using-update by cc-by-sa and MIT license
'MONGODB' 카테고리의 다른 글
[MONGODB] 와 MongoDB를 암호 "@"그 안에 (0) | 2019.12.05 |
---|---|
[MONGODB] 몽구스 findByIdAndUpdate 올바른 모델을 반환하지 (0) | 2019.12.05 |
[MONGODB] 형식 오류가 : db.collection는 함수가 아닙니다 (0) | 2019.12.05 |
[MONGODB] 방법 찾기 방법에서 몽구스 결과를 반환? (0) | 2019.12.05 |
[MONGODB] 몽구스 / MongoDB를에 Multifield 인덱스 만들기 (0) | 2019.12.05 |