MongoDB $pull을 사용하여 배열 내의 문서 삭제
MongoDB에 다음과 같은 컬렉션이 있습니다.
{
"_id" : "5327010328645530500",
"members" : [
{
"participationCoeff" : 1,
"tweetID" : "5327010328645530500"
},
{
"participationCoeff" : 1,
"tweetID" : "2820402625046999289"
},
{
"participationCoeff" : 0.6666666666666666,
"tweetID" : "6122060484520699114"
},
{
"participationCoeff" : 1,
"tweetID" : "4656669980325872747"
}
]
}
{
"_id" : "2646953848367646922",
"members" : [
{
"participationCoeff" : 1,
"tweetID" : "2646953848367646922"
},
{
"participationCoeff" : 0.75,
"tweetID" : "7750833069621794130"
},
{
"participationCoeff" : 0.5,
"tweetID" : "6271782334664128453"
}
]
}
기본적으로 컬렉션에는 클러스터가 있고 클러스터에는 클러스터가 있습니다._id
필드와 amembers
필드. 구성원 필드는 다음과 같은 형식의 문서 배열입니다.
{
"participationCoeff" : 1,
"tweetID" : "5327010328645530500"
}
이제 가끔 트윗을 일치시켜 클러스터 문서의 구성원 속성에 있는 하위 문서를 삭제해야 합니다.신분증.
그러나 이 효과를 얻을 수 있는 쿼리를 찾을 수 없습니다.기본적으로, 트윗은ID는 많은 클러스터에 참여하므로 다양한 클러스터의 '구성원' 속성의 여러 하위 문서에 나타납니다.특정 트윗에 일치하는 모든 클러스터의 모든 하위 문서(즉, 구성원 속성)를 제거할 수 있는 대량 $pull 작업을 제공하고 싶습니다.신분증.
약간의 도움과 직관이 정말 도움이 될 것입니다.
그것이 바로 그 것입니다.$pull
연산자가 하기 때문에 셸에서 사용할 수 있습니다.update
예:
db.clusters.update({},
{$pull: {members: {tweetID: '5327010328645530500'}}},
{multi: true})
설정multi
옵션을 선택하면 첫 번째 문서뿐만 아니라 모든 문서가 업데이트됩니다.
삭제합니다.multiple tweets
단일 쿼리에서 어레이를 전달합니다.$in
:-
db.clusters.update({},
{$pull: {members: {$in: [ {tweetID: '5327010328645530500'},{"tweetID" : "2820402625046999289"} ] } } },
{multi: true});
위의 방법은 몽구스에서 작동하지 않기 때문에 몽구스의 경우 작동합니다.
db.clusters.update({},
{$pull: {members:[ {tweetID: '5327010328645530500'},{"tweetID" : "2820402625046999289"} ] } });
한편 업데이트 방법은 더 이상 사용되지 않습니다.따라서 이에 대한 가능한 최신 솔루션 중 하나는 updateMany 메서드를 대신 사용하는 것입니다.
db.clusters.updateMany({},
{$pull: {members: {tweetID: '5327010328645530500'}}})
참고: 사용됨
"mongoose": "^5.12.13"
.
2021년 6월 22일 오늘에 관해서는, 당신은 사용할 수 있습니다.$in
그리고.$pull
mongodb 연산자를 사용하여 문서 배열에서 항목을 제거합니다.
상위 문서:
{
"name": "June Grocery",
"description": "Remember to pick Ephraim's favorit milk",
"createdDate": "2021-06-09T20:17:29.029Z",
"_id": "60c5f64f0041190ad312b419",
"items": [],
"budget": 1500,
"owner": "60a97ea7c4d629866c1d99d1",
}
항목 배열의 문서:
{
"category": "Fruits",
"bought": false,
"id": "60ada26be8bdbf195887acc1",
"name": "Kiwi",
"price": 0,
"quantity": 1
},
{
"category": "Toiletry",
"bought": false,
"id": "60b92dd67ae0934c8dfce126",
"name": "Toilet Paper",
"price": 0,
"quantity": 1
},
{
"category": "Toiletry",
"bought": false,
"id": "60b92fe97ae0934c8dfce127",
"name": "Toothpaste",
"price": 0,
"quantity": 1
},
{
"category": "Toiletry",
"bought": false,
"id": "60b92ffb7ae0934c8dfce128",
"name": "Mouthwash",
"price": 0,
"quantity": 1
},
{
"category": "Toiletry",
"bought": false,
"id": "60b931fa7ae0934c8dfce12d",
"name": "Body Soap",
"price": 0,
"quantity": 1
},
{
"category": "Fruit",
"bought": false,
"id": "60b9300c7ae0934c8dfce129",
"name": "Banana",
"price": 0,
"quantity": 1
},
{
"category": "Vegetable",
"bought": false,
"id": "60b930347ae0934c8dfce12a",
"name": "Sombe",
"price": 0,
"quantity": 1
},
쿼리:
MyModel.updateMany(
{ _id: yourDocumentId },
{ $pull: { items: { id: { $in: itemIds } } } },
{ multi: true }
);
참고: ItemIds는 다음의 배열입니다.ObjectId
아래 참조:
[
'60ada26be8bdbf195887acc1',
'60b930347ae0934c8dfce12a',
'60b9300c7ae0934c8dfce129'
]
언급URL : https://stackoverflow.com/questions/15121758/using-mongodb-pull-to-delete-documents-within-an-array
'programing' 카테고리의 다른 글
SQL Server - 날짜 필드를 UTC로 변환 (0) | 2023.06.20 |
---|---|
Oracle 중단 프로세스 문제 해결 (0) | 2023.06.20 |
현재 사용자 언어 찾기 (0) | 2023.06.20 |
그룹별 변수의 최소값에 해당하는 행 추출 (0) | 2023.06.20 |
i == (i = 2)의 결과는 무엇입니까? (0) | 2023.06.20 |