[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} );

나를 위해 트릭을했다.


답변

mongo 구문에서 일부 키를 삭제하려면 다음을 수행해야합니다.

{ $unset : { field : 1} }

몽구스에서도 똑같이 보입니다.

편집하다

예를 확인하십시오 .


답변

이것이 사용과 같은 부수적 인 문제가 될 수 있습니까?

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();
});