복붙노트

[MONGODB] 몽구스를 사용하여 MongoDB의 문서에서 키를 삭제

MONGODB

몽구스를 사용하여 MongoDB의 문서에서 키를 삭제

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

해결법

  1. ==============================

    1.초기 버전에서는이 노드 MongoDB의 네이티브 드라이버를 드롭 다운 필요했을 것이다. 각 모델은 모든 노드 MongoDB의 네이티브 제공하는 방법을 포함하는 컬렉션 개체가 있습니다. 이에 의해 문제의 조치를 할 수 있습니다 :

    초기 버전에서는이 노드 MongoDB의 네이티브 드라이버를 드롭 다운 필요했을 것이다. 각 모델은 모든 노드 MongoDB의 네이티브 제공하는 방법을 포함하는 컬렉션 개체가 있습니다. 이에 의해 문제의 조치를 할 수 있습니다 :

    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);
    
  2. ==============================

    2.이 작업을 수행 할 수 있습니다 :

    이 작업을 수행 할 수 있습니다 :

    User.findOne({}, function(err, user){
      user.key_to_delete = undefined;
      user.save();
    });
    
  3. ==============================

    3.나는 몽구스와 위의 기능의 나에게 요구했다을 사용하여 사용합니다. 함수 컴파일은 무료 오류하지만 필드는 여전히 남아있을 것입니다.

    나는 몽구스와 위의 기능의 나에게 요구했다을 사용하여 사용합니다. 함수 컴파일은 무료 오류하지만 필드는 여전히 남아있을 것입니다.

    user.set('key_to_delete', undefined, {strict: false} );
    

    나를 위해 트릭을했다.

  4. ==============================

    4.몽고 구문을 사용하면 다음을 수행 할 필요가 일부 키를 삭제합니다 :

    몽고 구문을 사용하면 다음을 수행 할 필요가 일부 키를 삭제합니다 :

    { $unset : { field : 1} }
    

    몽구스에서 동일 보인다.

    편집하다

    이 예제를 확인하십시오.

  5. ==============================

    5.이 사용처럼 반 문제가 될 수

    이 사용처럼 반 문제가 될 수

    function (user)
    

    대신에

    function(err, user)
    

    찾기의 콜백 하시나요? 이미 사건이 있었다처럼이 함께 도움말을 시도.

  6. ==============================

    6.몽구스 문서 ( 'lodash'라이브러리에서 또는 해제) 일반 자바 스크립트 객체와 그의 삭제 연산자를 사용할 수없는 이유. 아닙니다.

    몽구스 문서 ( 'lodash'라이브러리에서 또는 해제) 일반 자바 스크립트 객체와 그의 삭제 연산자를 사용할 수없는 이유. 아닙니다.

    옵션은 = NULL || doc.path 세트입니다 정의되지 않은 또는 일반 목적에 평소대로이 사용에서 몽구스 문서를 설정하는 Document.toObject () 메소드를 사용 할 수 있습니다. 몽구스 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
    });
    
  7. ==============================

    7.이 모든 대답의 문제는 그들이 하나 개의 필드 작동한다는 것입니다. 예 보자에 대한의는 "나는 그들이 빈 문자열"인 경우 내 문서에서 모든 필드를 삭제 싶은 말은. 필드가 빈 상태 (empty)의 캐릭터 라인이 설정되지 않은 $을 넣어 경우 먼저 확인해야합니다 :

    이 모든 대답의 문제는 그들이 하나 개의 필드 작동한다는 것입니다. 예 보자에 대한의는 "나는 그들이 빈 문자열"인 경우 내 문서에서 모든 필드를 삭제 싶은 말은. 필드가 빈 상태 (empty)의 캐릭터 라인이 설정되지 않은 $을 넣어 경우 먼저 확인해야합니다 :

    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 },
        );
    }
    
    
  8. ==============================

    8.당신이 수집에서 키를 제거 할 경우이 방법을 시도해보십시오. 이 날 위해 일했습니다

    당신이 수집에서 키를 제거 할 경우이 방법을 시도해보십시오. 이 날 위해 일했습니다

     db.getCollection('myDatabaseTestCollectionName').update({"FieldToDelete": {$exists: true}}, {$unset:{"FieldToDelete":1}}, false, true);
    
  9. ==============================

    9.당신이 사용할 수있는 삭제 user._doc.key

    당신이 사용할 수있는 삭제 user._doc.key

  10. from https://stackoverflow.com/questions/4486926/delete-a-key-from-a-mongodb-document-using-mongoose by cc-by-sa and MIT license