sourcecode

Mongoose를 사용하여 MongoDB 문서에서 키 삭제

copyscript 2023. 2. 15. 22:09
반응형

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 객체가 아니므로 삭제 연산자를 사용할 수 없습니다.(또는unsetLodash' 라이브러리에서).

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

반응형