sourcecode

Mongoose findOneAndUpdate 및 uversert에서 오류 및 영향을 받는 문서를 반환하지 않습니다.

copyscript 2023. 7. 8. 11:07
반응형

Mongoose findOneAndUpdate 및 uversert에서 오류 및 영향을 받는 문서를 반환하지 않습니다.

저는 아주 최소한의 모델을 가지고 있습니다.

var CompanySchema = new mongoose.Schema({
    name: { type: String, required: true, unique: true },
});

var Company = mongoose.model('Company', CompanySchema)

문서가 존재하지 않으면 하나의 문서를 추가하려고 합니다.현재 테스트하는 동안 문서가 없습니다.

models.Company.findOneAndUpdate({
    name: 'companyName'
}, {upsert: true}, function(err, numberAffected, raw){
    console.log(err, numberAffected, raw)
})

이것은 Mongoose 문서의 옵션을 사용하고 있습니다.

하지만err이라null,numberAffectednull입니다.문서가 업데이트되지 않는 이유는 무엇입니까?

Mongoose 4+ 이후에는 upsert와 함께 true를 설정하는 것을 잊지 마십시오. 그렇지 않으면 이전 문서를 업데이트된 문서가 아닌 반환 값으로 얻을 수 있습니다.

이것은 특히 new:true를 지정하지 않고 null 문서(기존 문서가 없음)를 수신하지만 오류가 없는 경우와 같이 요청이 문서를 작성할 때 매우 까다롭습니다.

    var myObj = ...;
    collection.findOneAndUpdate(
    {uniqueAttr: myObj.uniqueAttr},
    myObj,
    {upsert: true, new: true},
    function(...) {...}

당신의 코드에서 당신은 메소드의 3 파라미터 버전을 사용하고 있습니다.findOneAndUpdate따라서 게시한 문서에 따르면 매개 변수는 다음과 같습니다.A.findOneAndUpdate(conditions, update, callback).

방법의 네 번째 모수 버전을 사용하여 업서트 옵션을 지정해야 합니다.

저는 mongoose라는 프레임워크를 사용한 적이 없다는 것을 지적하고 싶습니다.이게 도움이 되길 바랍니다.

편집: 예, 당신의 경우,conditions그리고.update똑같습니다.개체가 예제에 표시된 것보다 더 복잡할 경우 _id 또는 "unique"(MongoDB에서 보장하지 않음) 특성(인덱스가 있는 경우 더 좋습니다)을 확인할 수 있습니다.예:

var myObj = ...;
collection.findOneAndUpdate({uniqueAttr: myObj.uniqueAttr}, myObj, {upsert: true}, function(){
     ...
});

언급URL : https://stackoverflow.com/questions/25116522/mongoose-findoneandupdate-and-upsert-returns-no-errs-no-documents-affected

반응형