MongoDB의 .updateOne이 Node.js에서 작동하지 않습니다.
다음 코드가 있습니다.
connection((db) => {
db.collection('orders')
.updateOne(
{ "_id": req.body._id}, // Filter
{"name": req.body.name} // Update
)
.then((obj) => {
console.log('Updated - ' + obj);
res.redirect('orders')
})
.catch((err) => {
console.log('Error: ' + err);
})
})
저는 순서대로 이름을 바꾸고 싶은데 업데이트가 안 됩니다.콘솔의 결과는 다음과 같습니다.
Updated - {"n":0,"nModified":0,"ok":1}
설명서를 읽으려고 했지만 끔찍합니다.
편집:{$set: {"name": req.body.name}},
역시 효과가 없었습니다.
EDIT 2: 전달된 ID가 데이터베이스의 _id와 일치합니다.데이터베이스에서 "ObjectId('5a42ja...')"라고 하는데 일반 텍스트 ID를 쿼리하는 것이 문제가 될 수 있습니까?
업데이트 쿼리에서 다음과 같이 "$set"을 사용해야 할 수도 있습니다.
{$set: {"name": req.body.name}}, // Update
설명서의 추가 정보
편집
작동하지 않으면 필터와 일치하는 항목이 없기 때문일 수 있습니다.
다음과 같은 ObjectId와 일치하도록 시도해야 할 수 있습니다.
var ObjectID = require('mongodb').ObjectID;
// In your request
{ "_id": ObjectID(req.body._id)}, // Filter
도움이 되길 바랍니다.
사용하다{$set: {"name": req.body.name}}
(Sparw에서 언급한 대로) 문서에서 원하는 속성을 업데이트합니다.또한 매개 변수로 전달하는 ID가 컬렉션에 없는 경우(같은 ID로 생성하려는 경우) 세 번째 매개 변수로 전달할 수 있습니다.{upsert: true}
하나를 만드는 것.
예를 들어, 다음과 같습니다.
connection((db) => {
db.collection('orders')
.updateOne(
{ "_id": req.body._id}, // Filter
{$set: {"name": req.body.name}}, // Update
{upsert: true} // add document with req.body._id if not exists
)
.then((obj) => {
console.log('Updated - ' + obj);
res.redirect('orders')
})
.catch((err) => {
console.log('Error: ' + err);
}) })
올바른 구문은 다음과 같습니다.
monDb.collection.updateOne(
{"_id": ObjectId(req.params.id)},
{ $set: updateDoc },
function(err, doc) {
...
}
);
업데이트: 아님ObjectID
그렇지만ObjectId
.
컬렉션 스키마에 업데이트할 필드가 없는 경우 이 문제가 발생할 수 있습니다.스키마가 엄격하지 않은 경우(예: Strict: false) 업데이트 연산자를 확인합니다.경우에 따라 새 업데이트 값이 기존 값과 같을 수 있습니다.이 경우 몽구스가 반환됩니다.
{ n: 1, nModified: 0, ok: 1 }
Tough @Spraw의 대답은 어떤 경우에는 옳지만, 때로는 효과가 없습니다.제 생각에 편리한 대답은updateOne({_id: new ObjectID(req.body._id)}, {$set: {"name": req.body.name}}, callback)
.
그_id
에mongodb
이다.BSON
개체를 인스턴스화해야 합니다.
저는 업데이트에서 객체를 전달하기 전에 "_id"/id 필드를 삭제해야 합니다.
또는 필드가 유효하지 않다고 표시됩니다.
참조로 사용하는 동안 키를 업데이트하는 것은 분명 최선의 방법이 아닙니다.
저도 이런 문제가 있었습니다. 저는 _id from req.body로 상수를 만듭니다.
const {_id} = req.body //pass ID user
await User.updateOne({_id},{$set:data}, (err)=>{
if(err) return res.status(200).json({
error: true,
code: 115,
message: "Erro to update user!"
})
})
NEXT.js
제 프로젝트는 React와 Next.js에 있습니다.저는 이 문제가 있었습니다.제 어리석은 해결책은 (다음 개발) xD로 재시작하는 것이었습니다.
Schema 모델에 두 개의 필드를 추가하고 그 새 필드를 업데이트하려고 했지만 mi project를 다시 시작할 때까지 작동하지 않았습니다.
누군가를 위해 시간을 절약하고 싶습니다.:)
몇 시간을 소비한 후 업데이트를 위해 ID 값을 정수로 변환해야 한다는 것을 알게 되었습니다. 그러나 찾기만 사용되는 경우에는 이것이 필요하지 않았습니다.
dbCollection.updateOne({ _id: parseInt(reqBody.id) }
언급URL : https://stackoverflow.com/questions/47656515/updateone-on-mongodb-not-working-in-node-js
'programing' 카테고리의 다른 글
sqdeveloper 오류 메시지:네트워크 어댑터에서 연결 오류를 설정할 수 없습니다. (0) | 2023.06.24 |
---|---|
Git 오류: 포인터여야 하지만 그렇지 않은 7개의 파일이 발견되었습니다. (0) | 2023.06.24 |
Twitter 부트스트랩에서 navbar 색상 변경 (0) | 2023.06.24 |
MongoDB에서 집계($match)와 찾기의 차이? (0) | 2023.06.24 |
MS SQL에서 지난 30분 동안의 기록을 검색하는 방법은 무엇입니까? (0) | 2023.06.24 |