Mongoose findByIdAndUpdate가 올바른 모델을 반환하지 않음


99

Mongoose findByIdAndUpdate가 콜백에서 올바른 모델을 반환하지 않는 이전에 본 적이없는 문제가 있습니다.

코드는 다음과 같습니다.

    var id = args._id;
    var updateObj = {updatedDate: Date.now()};
    _.extend(updateObj, args);

    Model.findByIdAndUpdate(id, updateObj, function(err, model) {
        if (err) {
            logger.error(modelString +':edit' + modelString +' - ' + err.message);
            self.emit('item:failure', 'Failed to edit ' + modelString);
            return;
        }
        self.emit('item:success', model);
    });

db의 원본 문서는 다음과 같습니다.

{
    _id: 1234
    descriptors: Array[2],
    name: 'Test Name 1'
}

들어가는 updateObj는 다음과 같습니다.

{
    _id: 1234
    descriptors: Array[2],
    name: 'Test Name 2'
}  

콜백에서 반환 된 모델은 updatedObj가 아니라 원래 모델과 동일합니다. db를 쿼리하면 올바르게 업데이트되었습니다. 데이터베이스에서 반환되지 않습니다.

이것은 '어리석은 사용자'오류처럼 느껴지지만 볼 수 없습니다. 어떤 아이디어라도 대단히 감사합니다.


1
그것은 굉장한 장소입니다. 그리고 그 패키지가 자체 단위 테스트를 통과했기 때문에 모든 프로젝트를 버전과 일치하도록 유지해야하는 이유를 상기시킵니다. 감사합니다.
JonRed

답변:


294

Mongoose 4.0에서 (및 ) new옵션의 기본값 이 findByIdAndUpdate( 릴리스 노트 # 2262 참조 findOneAndUpdate)로 변경되었습니다 . 즉 , 업데이트가 적용된 후 문서의 새 버전을 가져 오려면 옵션을로 명시 적으로 설정해야합니다 .falsetrue

Model.findByIdAndUpdate(id, updateObj, {new: true}, function(err, model) {...

5
또한 'create'메소드의 반환 값에 대한 변경 사항에 주목했습니다. 건배 친구, 가능하면 두 번 찬성했습니다.
JonRed

4
또한 몽구스 프로젝트에 대한 업데이트 된 문서에 대한 PR을 넣어 다른 사람을 잡지 않기를 바랍니다.
JonRed

3
오, @JohnnyHK 감사합니다. 이것은 나를 망쳤다. 물론 나는 새로운 것을 원한다. API와 더 일관성이있을 수 있지만 실제로 상식은 아닙니다. 업데이트하면 변경 사항을보고 싶습니다. 몽구스 감사합니다 ...
Peege151

21
와! 그들은 참으로 끔찍한 결정을 내 렸습니다! 이것이 업데이트 대신 처음부터 찾기를 수행하는 유일한 요점입니다.
Adam Lockhart

9
나는 누군가가 왜 새로운 대신에 응답에 이전 문서를 가지고 싶어하는지 이해하지 못합니다
emilioriosvz
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.