Mongoose를 사용하여 MongoDB 문서에서 키 삭제
Mongoose 라이브러리를 사용하여 node.js를 사용하여 MongoDB에 액세스하고 있습니다.
문서에서 키를 제거할 수 있는 방법이 있습니까? 즉, 값을 null로 설정할 뿐만 아니라 제거할 수도 있습니다.
User.findOne({}, function(err, user){
//correctly sets the key to null... but it's still present in the document
user.key_to_delete = null;
// doesn't seem to have any effect
delete user.key_to_delete;
user.save();
});
이전 버전에서는 node-mongb-native 드라이버를 드롭해야 했습니다.각 모델에는 노드 몽고브 네이티브가 제공하는 모든 메서드를 포함하는 컬렉션 개체가 있습니다.이것에 의해, 문제의 액션을 실행할 수 있습니다.
User.collection.update({_id: user._id}, {$unset: {field: 1 }});
버전 2.0 이후로는 다음 작업을 수행할 수 있습니다.
User.update({_id: user._id}, {$unset: {field: 1 }}, callback);
버전 2.4 이후 모델의 인스턴스가 이미 있는 경우 다음을 수행할 수 있습니다.
doc.field = undefined;
doc.save(callback);
다음과 같은 작업을 수행할 수 있습니다.
User.findOne({}, function(err, user){
user.key_to_delete = undefined;
user.save();
});
저는 mongoose를 사용하고 있으며 위의 기능 중 하나를 사용하여 요구 사항을 충족시켰습니다.함수는 오류 없이 컴파일되지만 필드는 그대로 유지됩니다.
user.set('key_to_delete', undefined, {strict: false} );
날 위해 묘기를 부렸지
일부 키를 삭제하려면 mongo 구문에서 다음을 수행해야 합니다.
{ $unset : { field : 1} }
몽구스도 마찬가지인 것 같아
편집
이 예를 확인해 주세요.
시험:
User.findOne({}, function(err, user){
// user.key_to_delete = null; X
`user.key_to_delete = undefined;`
delete user.key_to_delete;
user.save();
});
수집에서 키를 제거하려면 이 방법을 사용하십시오.
db.getCollection('myDatabaseTestCollectionName').update({"FieldToDelete": {$exists: true}}, {$unset:{"FieldToDelete":1}}, false, true);
이 경우, 예를 들어, 사용법등의 부차적인 문제가 있는 것은 아닐까요.
function (user)
대신
function(err, user)
제가 이미 사건을 맡아서 도와드리려고 한 거예요
Mongoose 문서는 일반 javascript 객체가 아니므로 삭제 연산자를 사용할 수 없습니다.(또는unset
Lodash' 라이브러리에서).
doc.path = null || defined를 설정하거나 Document.toObject() 메서드를 사용하여 mongoose 문서를 플레인 객체로 변환하고 평소처럼 사용할 수 있습니다.자세한 것은, mongoose api-ref 를 참조해 주세요.http://mongoosejs.com/docs/api.html#document_Document-toObject
예를 들어 다음과 같습니다.
User.findById(id, function(err, user) {
if (err) return next(err);
let userObject = user.toObject();
// userObject is plain object
});
이 모든 답변의 문제는 그들이 한 분야에서 일한다는 것이다.예를 들어, 빈 문자열인 경우 문서에서 모든 필드를 삭제한다고 가정합니다.""
. 먼저 필드가 비어 있는지 확인해야 합니다. 입력해 주세요.$unset
:
function unsetEmptyFields(updateData) {
const $unset = {};
Object.keys(updatedData).forEach((key) => {
if (!updatedData[key]) {
$unset[key] = 1;
delete updatedData[key];
}
});
updatedData.$unset = $unset;
if (isEmpty(updatedData.$unset)) { delete updatedData.$unset; }
return updatedData;
}
function updateUserModel(data){
const updatedData = UnsetEmptyFiled(data);
const Id = "";
User.findOneAndUpdate(
{ _id: Id },
updatedData, { new: true },
);
}
컬렉션에서 특정 필드를 삭제하려면 다음과 같이 해야 합니다.
User.remove ({ key_to_delete: req.params.user.key_to_delete});
사용자 삭제를 사용할 수 있습니다._doc.키
언급URL : https://stackoverflow.com/questions/4486926/delete-a-key-from-a-mongodb-document-using-mongoose