Mongodb에서의 문서 갱신 및 반환
업데이트된 문서를 받고 싶습니다.이것은 원래 코드이며 정상적으로 업데이트되지만 문서가 반환되지 않습니다.
collection.update({ "code": req.body.code },{$set: req.body.updatedFields}, function(err, results) {
res.send({error: err, affected: results});
db.close();
});
제가 사용한 것은toArray
이 함수는 "Cannot use a write Concern without a provided callback" 이라는 오류를 발생시켰습니다.
collection.update({ "code": req.body.code },{$set: req.body.updatedFields}).toArray( function(err, results) {
res.send({error: err, affected: results});
db.close();
});
좋은 생각 있어요?
collection.update()
는 자신의 콜백에 영향을 받은 문서의 수만을 보고합니다.
수정 중에 문서를 가져오려면 대신 (이전)을 사용합니다.
collection.findOneAndUpdate(
{ "code": req.body.code },
{ $set: req.body.updatedFields },
{ returnOriginal: false },
function (err, documents) {
res.send({ error: err, affected: documents });
db.close();
}
);
그returnOriginal
옵션(또는new
With Mongoose)를 사용하면 콜백에 전달될 발견된 문서의 버전(원본 [기본값] 또는 업데이트된 버전)을 지정할 수 있습니다.
returnOriginal
버전에서는 권장되지 않습니다.3.6
.사용하다returnDocument: "before" | "after"
버전용3.6
그리고 나중에.
면책사항:이 답변은 현재 버전 3.6 이후의 Node.js 드라이버를 참조하고 있습니다.새 버전이 출시되면 해당 문서에서 새로운 권장 해제 경고 및 권장되는 대체 방법을 확인하십시오.
솔루션은 다음과 같이 설정합니다. {returnOriginal: false}.
collection.findOneAndUpdate(
whereObj,
updateObj,
{returnOriginal: false});
docs에서 많은 갱신과 수정된 레코드를 반환하는 방법을 찾을 수 없었기 때문에 회피책을 강구했습니다.
적어도 다음 방법으로 찾을 수 있는 장애 중 하나는 문서가 수정되었는지 또는 이미 사용 중인 값이 있는지 알 수 없다는 것입니다.
function findAndUpdateMany(filter, updateOptions) {
return collection.find(filter).project({_id: 1}).toArray()
.then(function(matchingIds) {
filter = {_id: {$in: matchingIds}}
return collection.updateMany(filter, updateOptions)
}).then(function() {
return collection.find(filter).toArray()
})
}
파티에는 조금 늦었지만, 여기 당신의 질문에 대한 간단한 2022년 해결책이 있습니다.이 앱은 NestJs를 사용하고 있습니다.
const updatedPainting: Partial<IGallery> = {
imageAltTxt: updateGalleryDto.imageAltTxt,
name: updateGalleryDto.name,
dateCreated: updateGalleryDto.dateCreated,
size: updateGalleryDto.size,
description: updateGalleryDto.description,
isFeatured: updateGalleryDto.isFeatured || false,
};
return await this.galleryModel.findOneAndUpdate(
{ _id },
{ $set: { imageUrl, ...updatedPainting } },
{ returnDocument: 'after' },
);
하나의 문서에서 업데이트 작업을 수행할 때 업데이트된 문서를 가져오려면 findOneAndUpdate()를 사용하고 옵션 개체에서 returnDocument 속성을 'after'로 설정하십시오.
let options = {returnDocument: 'after'}
const upadatedDoc = collection.findOneAndUpdate({'your query'},{'your update'}, options)
몽구스를 쓰시는 분들은returnOriginal: false
에서는 통하지 않았다.v5.11.10
,
그렇지만new: true
일했다,
const filter = { name: 'Jean-Luc Picard' };
const update = { age: 59 };
let doc = await Character.findOneAndUpdate(filter, update, {
new: true
});
doc.name; // 'Jean-Luc Picard'
doc.age; // 59
WriteResult 개체를 확인합니다.
http://docs.mongodb.org/manual/reference/method/db.collection.update/ #writeresults-update
WriteResult result = collection.update({ "code": req.body.code },{$set: req.body.updatedFields}, function(err, results) {
res.send({error: err, affected: results});
db.close();
});
결과는 다음과 같습니다.
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
업데이트된 결과를 원할 경우 기본 키로 다른 쿼리를 수행합니다.
언급URL : https://stackoverflow.com/questions/24747189/update-and-return-document-in-mongodb
'programing' 카테고리의 다른 글
Angularjs: ng-options 그룹화 기준 (0) | 2023.03.15 |
---|---|
AngularJS에서 객체 데이터 소스를 ng-repeat으로 정렬하려면 어떻게 해야 합니까? (0) | 2023.03.15 |
ReactJs: 여러 번 버튼 누름 방지 (0) | 2023.03.15 |
리액트 라우터를 사용하여 페이지를 새로고침하려면 어떻게 해야 하나요? (0) | 2023.03.15 |
스프링 부트 웹 앱이 Gradle에서 완전히 실행되지 않는 이유는 무엇입니까? (0) | 2023.03.15 |