다음은 배열 구조입니다.
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 ()를 사용하는 것을 잊지 마십시오. 그렇지 않으면 변경 사항이 데이터베이스에 저장되지 않습니다.