mongoose에서 여러 문서를 업데이트하려면 어떻게 해야 하나요?
다음 스크립트를 찾았습니다.
Device.find(function(err, devices) {
devices.forEach(function(device) {
device.cid = '';
device.save();
});
});
MongoDB에는 여러 문서에 대한 업데이트를 위한 "multi" 플래그가 있지만 mongoose에서는 이 플래그를 사용할 수 없었습니다.아직 지원되지 않는 건가요?아니면 제가 잘못하고 있는 건가요?
Device.update({}, {cid: ''}, false, true, function (err) {
//...
});
현시점에서는 그렇다고 생각합니다.update()
Mongoose 에서는 몇 가지 문제가 있습니다.https://groups.google.com/forum/ # % 21 topic / mongoose - orm / G8i9S7E8Erg 및 https://groups.google.com/d/topic/mongoose-orm/K5pSHT4hJ_A/discussion 를 참조해 주세요.
다만, 업데이트에 대해서는, 다음의 문서를 확인해 주세요.http://mongoosejs.com/docs/api.html (모델아래).정의는 다음과 같습니다.
이전 솔루션(mongoose 5+ 버전 이후 감가상각)
Model.update = function (query, doc, options, callback) { ... }
오브젝트 내에 옵션을 전달해야 코드가 다음과 같습니다.
Model.update = function ({}, {cid: ''}, {multi: true}, function(err) { ... });
새로운 솔루션
Model.updateMany = function (query, doc, callback) { ... }
Model.updateMany = function ({}, {cid: ''}, function(err) { ... });
Mongoose는 당신의 cid를 $set으로 감싸고 있기 때문에 이것은 mongo shell에서 동일한 업데이트를 실행하는 것과 같지 않습니다.셸에서 실행한 경우 모든 문서는 1개의 단일 문서로 대체됩니다.cid: ''
.
그 답변들은 더 이상 사용되지 않습니다.실제 솔루션은 다음과 같습니다.
Device.updateMany({}, { cid: '' });
multi: true 옵션을 사용해야 합니다.
Device.update({},{cid: ''},{multi: true});
mongoose 문서에서 언급한 바와 같이 이 방법은 다음과 같습니다.
db.collection.updateMany(condition, update, options, callback function)
다음 예시는 문서를 기반으로 합니다.
// creating arguments
let conditions = {};
let update = {
$set : {
title : req.body.title,
description : req.body.description,
markdown : req.body.markdown
}
};
let options = { multi: true, upsert: true };
// update_many :)
YourCollection.updateMany(
conditions, update, options,(err, doc) => {
console.log(req.body);
if(!err) {
res.redirect('/articles');
}
else {
if(err.name == "ValidationError"){
handleValidationError(err , req.body);
res.redirect('/new-post');
}else {
res.redirect('/');
}
}
});
이 방법이 나에게 도움이 됐으면 좋겠다:)
await Device.updateMany({_id: {$in: cid}},{ $set: {columnNameHere: "columnValueHere"}},{multi:true,upsert: true,new: true});
@contains가 언급한 바와 같이:
let conditions = {};
let options = { multi: true, upsert: true };
Device.updateMany(conditions , { cid: '' },options );
콜백 기능을 추가할 수 있습니다.options
그럴 필요는 없어요
다음과 같은 방법으로 시도할 수 있습니다.
try {
const icMessages = await IcMessages.updateMany({
room: req.params.room
}, {
"$set": {
seen_status_2: "0"
}
}, {
"multi": true
});
res.json(icMessages)
} catch (err) {
console.log(err.message)
res.status(500).json({
message: err.message
})
}
언급URL : https://stackoverflow.com/questions/6694507/how-can-i-update-multiple-documents-in-mongoose
'programing' 카테고리의 다른 글
WordPress "on-the-fly"에서 언어를 전환하는 방법 (0) | 2023.04.05 |
---|---|
WordPress 및 Ajax - 쇼트코드 콘텐츠 새로고침 (0) | 2023.04.05 |
ts-node는 tsc가 프로젝트를 정상적으로 컴파일하는 동안 d.ts 파일을 무시합니다. (0) | 2023.04.05 |
HOC와 컴포넌트 랩의 차이점 (0) | 2023.04.05 |
고속 XML 잭슨:큰따옴표 삭제 (0) | 2023.04.05 |