MongoDB 배열에서 요소 제거
- MongoDB 배열에서 요소 제거
-
MongoDB
$pull
을 사용하여 문서 배열에서 요소 제거 -
MongoDB
$pullAll
을 사용하여 배열에서 요소 제거 -
MongoDB
$pop
을 사용하여 배열에서 요소 제거 -
MongoDB
$unset
을 사용하여 주어진 요소를 포함하는 필드 제거 -
MongoDB 위치 연산자를 사용하여 요소를 제거하는 대신
null
로 설정
프로젝트 요구 사항에 따라 다른 접근 방식을 채택할 수 있습니다. 오늘은 $pull
, $pullAll
, $pop
, $unset
및 위치 연산자($
)를 사용하여 작업하는 동안 문서 배열 또는 배열에서 요소를 제거하는 방법을 배웁니다. 몽고DB에서.
MongoDB 배열에서 요소 제거
언급된 모든 방법을 연습하려면 샘플 문서 모음이 있어야 합니다. collection
이라는 컬렉션을 만들고 하나의 문서만 삽입합니다.
하나의 문서를 포함하는 다음 컬렉션
을 사용할 수도 있습니다.
예제 코드:
// MongoDB version 5.0.8
> db.collection.insertMany([
{
contact: {
phone: [
{"type" : "UAN", "number" : "123456789"},
{"type" : "office", "number" : "987546321"},
{"type" : "personal", "number" : "852147963"}
]
},
services: ["Google", "Instagram", "Twitter", "Facebook"],
scores: [ 0, 1, 8, 17, 18, 8, 20, 10 ]
},
{
contact: {
phone: [
{"type" : "UAN", "number" : "456321879"},
{"type" : "office", "number" : "874596321"},
{"type" : "personal", "number" : "964785123"}
]
},
services: ["Google", "Instagram", "Twitter"],
scores: [ 1, 8, 2, 3, 8, 7, 1 ]
}
]);
collection
이라는 컬렉션이 없더라도 걱정하지 마십시오. 위의 쿼리는 당신을 위해 그것을 생성하고 채울 것입니다. 다음으로 db.collection.find().pretty()
를 실행하여 삽입된 문서를 볼 수 있습니다.
다음 코드 예제를 실행한 후에는 업데이트된 문서를 볼 수 없다는 것을 기억하십시오. 이를 위해서는 db.collection.find().pretty()
명령을 실행해야 합니다.
MongoDB $pull
을 사용하여 문서 배열에서 요소 제거
예제 코드:
// MongoDB version 5.0.8
> db.collection.update(
{ _id : ObjectId("62aae796f27219958a489b89") },
{ $pull : { "contact.phone": { "number": "987546321" } } }
);
출력:
{
"_id" : ObjectId("62aae796f27219958a489b89"),
"contact" : {
"phone" : [
{ "type" : "UAN", "number" : "123456789" },
{ "type" : "personal", "number" : "852147963" }
]
},
"services" : [ "Google", "Instagram", "Twitter", "Facebook" ],
"scores" : [ 0, 1, 8, 17, 18, 8, 20, 10 ]
}
{
"_id" : ObjectId("62aae796f27219958a489b8a"),
"contact" : {
"phone" : [
{ "type" : "UAN", "number" : "456321879" },
{ "type" : "office", "number" : "874596321" },
{ "type" : "personal", "number" : "964785123" }
]
},
"services" : [ "Google", "Instagram", "Twitter" ],
"scores" : [ 1, 8, 2, 3, 8, 7, 1 ]
}
여기에서 $pull
연산자를 사용하여 필터 쿼리 또는 지정된 조건과 일치하는 기존 배열에서 값/값의 모든 인스턴스를 제거합니다.
위의 코드 예에서 _id
가 ObjectId("62aae796f27219958a489b89")
와 동일한 문서를 검색하고 있습니다. 문서가 지정된 조건과 일치하면 contact.phone.number
가 987546321
과 동일한 기존 배열에서 인스턴스를 제거합니다.
$pull
연산자를 사용하는 동안 다음 사항을 기억하십시오.
- 제거해야 하는 주어진
value
가 배열인 경우$pull
연산자는 주어진value
(순서 포함)를 정확히 충족하는 요소만 배열에서 제거합니다. - 제거해야 하는 지정된
값
이 문서인 경우$pull
연산자는 정확한 필드 및 값이 포함된 배열에서만 요소를 제거합니다. 필드의 순서는 여기에서 다를 수 있습니다. - 주어진
condition
과 배열의 요소가 포함된 문서인 경우$pull
연산자는 모든 배열 요소가 컬렉션의 문서인 것처럼condition
을 적용합니다. 이에 대한 자세한 내용은 이것을 확인하실 수 있습니다.
이제 컬렉션의 모든 문서에 대해 제거
작업을 수행하려는 또 다른 상황이 있습니다. 이를 위해 $pull
을 사용하여 다음 구문을 사용하는 반면 {multi: true}
는 지정된 조건의 모든 문서에서 작동합니다.
예제 코드:
// MongoDB version 5.0.8
> db.collection.update({},
{ $pull: { "contact.phone": { "type": "UAN" } } },
{ multi: true }
);
출력:
{
"_id" : ObjectId("62aae796f27219958a489b89"),
"contact" : {
"phone" : [
{ "type" : "personal", "number" : "852147963" }
]
},
"services" : [ "Google", "Instagram", "Twitter", "Facebook" ],
"scores" : [ 0, 1, 8, 17, 18, 8, 20, 10 ]
}
{
"_id" : ObjectId("62aae796f27219958a489b8a"),
"contact" : {
"phone" : [
{ "type" : "office", "number" : "874596321" },
{ "type" : "personal", "number" : "964785123" }
]
},
"services" : [ "Google", "Instagram", "Twitter" ],
"scores" : [ 1, 8, 2, 3, 8, 7, 1 ]
}
위의 출력을 얻으려면 contact.phone.type
이 "UAN"
과 동일한 컬렉션의 모든 문서에서 배열 요소를 제거합니다.
다음 작업은 scores
배열에서 값이 2
보다 크거나 같고 6
( 2 <= value <= 6
)보다 작거나 같은 요소를 제거하는 것입니다. 선택한 컬렉션의 모든 문서에 대해 다음 쿼리를 실행합니다.
예제 코드:
// MongoDB version 5.0.8
> db.collection.update(
{},
{ $pull : { scores : {$gte: 2, $lte: 6} } },
{ multi: true }
)
출력:
{
"_id" : ObjectId("62aae796f27219958a489b89"),
"contact" : {
"phone" : [
{ "type" : "personal", "number" : "852147963" }
]
},
"services" : [ "Google", "Instagram", "Twitter", "Facebook" ],
"scores" : [ 0, 1, 8, 17, 18, 8, 20, 10 ]
}
{
"_id" : ObjectId("62aae796f27219958a489b8a"),
"contact" : {
"phone" : [
{ "type" : "office", "number" : "874596321" },
{ "type" : "personal", "number" : "964785123" }
]
},
"services" : [ "Google", "Instagram", "Twitter" ],
"scores" : [ 1, 8, 8, 7, 1 ]
}
문자열 유형 값으로 연습하려면 다음과 같이 하면 됩니다.
예제 코드:
// MongoDB version 5.0.8
> db.collection.update(
{},
{ $pull: { "services": { $in: [ "Google", "Instagram" ] }, "scores": 1 } },
{ multi: true }
)
출력:
{
"_id" : ObjectId("62aae796f27219958a489b89"),
"contact" : {
"phone" : [
{ "type" : "personal", "number" : "852147963" }
]
},
"services" : [ "Twitter", "Facebook" ],
"scores" : [ 0, 8, 17, 18, 8, 20, 10 ]
}
{
"_id" : ObjectId("62aae796f27219958a489b8a"),
"contact" : {
"phone" : [
{ "type" : "office", "number" : "874596321" },
{ "type" : "personal", "number" : "964785123" }
]
},
"services" : [ "Twitter" ],
"scores" : [ 8, 8, 7 ]
}
이 코드 예제에서는 $in
비교 연산자를 사용하여 값 배열을 갖고 그 중 하나라도 있으면 services
배열에서 제거합니다.
또한 $pull
연산자를 사용하여 이 모든 제거 작업을 수행하는 동안 scores
배열에서 1
을 제거합니다.
MongoDB $pullAll
을 사용하여 배열에서 요소 제거
예제 코드:
// MongoDB version 5.0.8
> db.collection.update(
{ _id: ObjectId("62aae796f27219958a489b8a") },
{ $pullAll: { "scores": [8] } }
)
출력:
{
"_id" : ObjectId("62aae796f27219958a489b89"),
"contact" : {
"phone" : [
{ "type" : "personal", "number" : "852147963" }
]
},
"services" : [ "Twitter", "Facebook" ],
"scores" : [ 0, 8, 17, 18, 8, 20, 10 ]
}
{
"_id" : ObjectId("62aae796f27219958a489b8a"),
"contact" : {
"phone" : [
{ "type" : "office", "number" : "874596321" },
{ "type" : "personal", "number" : "964785123" }
]
},
"services" : [ "Twitter" ],
"scores" : [ 7 ]
}
이 코드의 경우 $pullAll
연산자를 사용하여 이미 존재하는 배열에서 주어진 값의 모든 항목(인스턴스)을 제거합니다. 예를 들어, 8
이라는 숫자가 score
배열에 두 번 나타나면 8
값이 모두 제거됩니다.
필터 쿼리를 지정하여 배열 요소를 제거하는 $pull
연산자와 마찬가지로 $pullAll
은 나열된 값과 일치하는 배열 요소를 삭제/제거합니다.
배열에 포함된 문서를 처리하기 위해 점 표기법을 사용합니다.
MongoDB $pop
을 사용하여 배열에서 요소 제거
배열에서 첫 번째 또는 마지막 요소를 제거하려는 경우 $pop
연산자를 사용할 수 있습니다. 이를 위해 -1
또는 1
을 $pop
연산자에 전달하여 처음 또는 마지막에서 배열 요소를 제거합니다.
예제 코드:
// MongoDB version 5.0.8
> db.collection.update(
{ _id: ObjectId("62aae796f27219958a489b89") },
{ $pop: { "scores": -1 } }
)
출력:
{
"_id" : ObjectId("62aae796f27219958a489b89"),
"contact" : {
"phone" : [
{ "type" : "personal", "number" : "852147963" }
]
},
"services" : [ "Twitter", "Facebook" ],
"scores" : [ 8, 17, 18, 8, 20, 10 ]
}
{
"_id" : ObjectId("62aae796f27219958a489b8a"),
"contact" : {
"phone" : [
{ "type" : "office", "number" : "874596321" },
{ "type" : "personal", "number" : "964785123" }
]
},
"services" : [ "Twitter" ],
"scores" : [ 7 ]
}
MongoDB $unset
을 사용하여 주어진 요소를 포함하는 필드 제거
예제 코드:
// MongoDB version 5.0.8
> db.collection.update(
{ _id : ObjectId("62aae796f27219958a489b89") },
{ $unset : {"scores" : 8 }}
)
출력:
{
"_id" : ObjectId("62aae796f27219958a489b89"),
"contact" : {
"phone" : [
{ "type" : "personal", "number" : "852147963" }
]
},
"services" : [ "Twitter", "Facebook" ]
}
{
"_id" : ObjectId("62aae796f27219958a489b8a"),
"contact" : {
"phone" : [
{ "type" : "office", "number" : "874596321" },
{ "type" : "personal", "number" : "964785123" }
]
},
"services" : [ "Twitter" ],
"scores" : [ 7 ]
}
여기에서 $unset
연산자를 사용하여 주어진 값을 포함하는 특정 필드를 제거합니다. 예를 들어, 필터 쿼리와 일치하고 어레이 요소로 8
이 포함된 scores
필드를 제거합니다.
$unset
연산자를 위치 연산자($
)와 함께 사용할 때 일치하는 요소를 제거하지 않고 null
로 설정합니다. 이를 연습하려면 다음 섹션을 참조하십시오.
MongoDB 위치 연산자를 사용하여 요소를 제거하는 대신 null
로 설정
예제 코드:
// MongoDB version 5.0.8
> db.collection.update(
{"services": "Facebook"},
{ $unset: {"services.$" : 1}}
)
출력:
{
"_id" : ObjectId("62aae796f27219958a489b89"),
"contact" : {
"phone" : [
{ "type" : "personal", "number" : "852147963" }
]
},
"services" : [ "Twitter", null ]
}
{
"_id" : ObjectId("62aae796f27219958a489b8a"),
"contact" : {
"phone" : [
{ "type" : "office", "number" : "874596321" },
{ "type" : "personal", "number" : "964785123" }
]
},
"services" : [ "Twitter" ],
"scores" : [ 7 ]
}
이 코드 조각은 위치 연산자와 함께 $unset
을 사용하여 배열 요소를 제거하는 대신 null
로 설정합니다. $
를 사용하여 services
배열에서 값이 Facebook
인 배열의 첫 번째 요소를 업데이트합니다.
이 접근 방식은 배열 요소의 위치를 모를 때 사용할 수 있습니다. 반면에 주어진 배열 필드의 모든 요소를 업데이트하려는 경우 $[]
(모든 위치 연산자)를 사용할 수도 있습니다.