[mongodb] mongodb에서 배열 요소를 제거하는 방법은 무엇입니까?

다음은 배열 구조입니다.

contact: {
    phone: [
        {
            number: "+1786543589455",
            place: "New Jersey",
            createdAt: ""
        }
        {
            number: "+1986543589455",
            place: "Houston",
            createdAt: ""
        }

    ]
}

여기서는 mongo id ( _id)와 phone number ( +1786543589455) 만 알고 있으며 문서에서 해당 배열 요소 전체를 제거해야합니다. 즉, 전화 배열의 인덱스 요소가 0이면 전화 번호와 일치하며 해당 배열 요소를 제거해야합니다.

contact: {
    phone: [
        {
            number: "+1986543589455",
            place: "Houston",
            createdAt: ""
        }
    ]
}

다음 업데이트 방법으로 시도했습니다.

collection.update(
    { _id: id, 'contact.phone': '+1786543589455' },
    { $unset: { 'contact.phone.$.number': '+1786543589455'} }
);

그러나 그것은 number: +1786543589455전화 배열의 0 인덱싱 요소가 아닌 내부 배열 객체에서 제거 됩니다. pull성공하지 않고 시도했습니다 .

mongodb에서 배열 요소를 제거하는 방법은 무엇입니까?



답변

다음 쿼리를 시도하십시오.

collection.update(
  { _id: id },
  { $pull: { 'contact.phone': { number: '+1786543589455' } } }
);

주어진 문서를 찾고 배열 _id에서 전화 +1786543589455를 제거합니다 contact.phone.

를 사용 $unset하여 배열의 값을 설정 해제 (로 설정) 할 수 null있지만 완전히 제거하지는 않습니다.


답변

아래 코드는 전화 번호가 ‘+1786543589455’인 배열에서 전체 개체 요소를 제거합니다.

db.collection.update(
  { _id: id },
  { $pull: { 'contact': { number: '+1786543589455' } } }
);


답변

Mongoose : 문서에서 :

하위 문서 배열에서 문서를 제거하기 위해 일치하는 _id를 가진 개체를 전달할 수 있습니다.

contact.phone.pull({ _id: itemId }) // remove
contact.phone.pull(itemId); // this also works

정답은 Leonid Beschastny의 답변을 참조하십시오.


답변

$ pull을 사용하여 하위 문서를 제거 할 수 있습니다. $ pull 연산자는 지정된 조건과 일치하는 값의 모든 인스턴스를 기존 배열에서 제거합니다.

Collection.update({
    _id: parentDocumentId
  }, {
    $pull: {
      subDocument: {
        _id: SubDocumentId
      }
    }
  });

그러면 주어진 ID에 대해 상위 문서를 찾은 다음 주어진 기준과 일치하는 하위 문서에서 요소를 제거합니다.

풀에 대한 자세한 내용은 여기를 참조 하십시오 .


답변

Mongoose API를 사용하고 하위 / 하위 개체를 가져 오려는 경우 :이 문서를 읽으십시오.
편집을 마쳤을 때 save ()를 사용하는 것을 잊지 마십시오. 그렇지 않으면 변경 사항이 데이터베이스에 저장되지 않습니다.


답변