[mongodb] 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} );
나를 위해 트릭을했다.
답변
답변
이것이 사용과 같은 부수적 인 문제가 될 수 있습니까?
function (user)
대신에
function(err, user)
찾기의 콜백을 위해? 이미 사건이 있었기 때문에 이것을 돕기 위해 노력했습니다.
답변
Mongoose 문서는 일반 자바 스크립트 객체가 아니므로 삭제 연산자를 사용할 수 없습니다. 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
});
답변
시험:
User.findOne({}, function(err, user){
// user.key_to_delete = null; X
`user.key_to_delete = undefined;`
delete user.key_to_delete;
user.save();
});