Mongoose를 사용하여 MongoDB 문서에서 키 삭제
node.js로 MongoDB에 액세스하기 위해 Mongoose 라이브러리를 사용하고 있습니다.
문서에서 키 를 제거 하는 방법이 있습니까? 즉 값을 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-mongodb-native 드라이버를 드롭 다운해야했습니다. 각 모델에는 node-mongodb-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();
});
나는 몽구스를 사용하고 위의 기능 중 하나를 사용하여 요구 사항을 충족했습니다. 이 함수는 오류없이 컴파일되지만 필드는 여전히 남아 있습니다.
user.set('key_to_delete', undefined, {strict: false} );
나를 위해 트릭을했다.
mongo 구문에서 일부 키를 삭제하려면 다음을 수행해야합니다.
{ $unset : { field : 1} }
몽구스에서도 똑같이 보입니다.
편집하다
이 예를 확인하십시오 .
이것은 사용과 같은 부수적 인 문제가 될 수 있습니까?
function (user)
대신에
function(err, user)
찾기의 콜백을 위해? 이미 사건이 있었기 때문에 이것을 돕기 위해 노력했습니다.
몽구스 문서는 일반 자바 스크립트 객체가 아니기 때문에 삭제 연산자를 사용할 수 없습니다 (또는 unset
'lodash'라이브러리에서).
옵션은 doc.path = null을 설정하는 것입니다 || undefined 또는 Document.toObject () 메서드를 사용하여 몽구스 문서를 일반 객체로 전환하고 거기에서 평소처럼 사용합니다. 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 },
);
}
컬렉션에서 키를 제거하려면이 방법을 시도하십시오. 이것은 나를 위해 일했다
db.getCollection('myDatabaseTestCollectionName').update({"FieldToDelete": {$exists: true}}, {$unset:{"FieldToDelete":1}}, false, true);
delete user._doc.key를 사용할 수 있습니다.
참고 URL : https://stackoverflow.com/questions/4486926/delete-a-key-from-a-mongodb-document-using-mongoose
'Program Tip' 카테고리의 다른 글
Scikit-learn 데이터 세트를 Pandas 데이터 세트로 변환하는 방법은 무엇입니까? (0) | 2020.10.13 |
---|---|
두 개의 NSNumber 객체를 추가하는 방법은 무엇입니까? (0) | 2020.10.13 |
Java에서 소수점 이하 두 자리까지만 두 배로자를 수 있습니까? (0) | 2020.10.13 |
{m} {n} ( '정확히 n 번'두 번)은 어떻게 작동하나요? (0) | 2020.10.13 |
매개 변수가 일정 할 수 있습니까? (0) | 2020.10.12 |