development

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

big-blog 2020. 7. 29. 07:25
반응형

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전화 배열의 인덱스 요소가 아닌 내부 배열 객체에서 제거합니다 . 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' } } }
);

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

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

주어진 ID에 대해 부모 문서를 찾은 다음 주어진 기준과 일치하는 subDocument에서 요소를 제거합니다.

pull 여기 에 대해 자세히 알아보십시오 .


몽구스에서 : 문서에서 :

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

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

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

참고 URL : https://stackoverflow.com/questions/16959099/how-to-remove-array-element-in-mongodb

반응형