$[identifier] 배열 업데이트 연산자는 지정된 조건과 일치하는 배열의 특정 요소를 업데이트하는 데 사용됩니다. 이 연산자는 특정 조건에 따라 배열 내에서 여러 요소를 업데이트해야 하는 경우에 유용합니다. 문서 내에서 보다 세부적인 업데이트를 허용하므로 복잡한 데이터 구조를 관리하기 위한 강력한 도구입니다.
문법
{
<update operator>: {
<array field>.$[<identifier>]: <value>
}
},
{
arrayFilters: [
{ <identifier>.<field>: <condition> }
]
}
매개 변수
| 매개 변수 | Description |
|---|---|
<update operator> |
적용할 업데이트 연산자(예: $set등 $inc)입니다. |
<array field> |
업데이트할 배열이 포함된 필드입니다. |
<identifier> |
배열의 특정 요소와 arrayFilters 일치하기 위해 사용되는 자리 표시자입니다. |
<value> |
설정하거나 업데이트할 값입니다. |
arrayFilters |
업데이트할 요소를 식별하는 필터 조건의 배열입니다. |
<field> |
확인할 배열 요소 내의 특정 필드입니다. |
<condition> |
배열 요소를 업데이트하기 위해 충족해야 하는 조건입니다. |
예시
스토어 컬렉션에서 이 샘플 문서를 고려합니다.
{
"_id": "905d1939-e03a-413e-a9c4-221f74055aac",
"name": "Trey Research | Home Office Depot - Lake Freeda",
"location": {
"lat": -48.9752,
"lon": -141.6816
},
"staff": {
"employeeCount": {
"fullTime": 12,
"partTime": 19
}
},
"sales": {
"salesByCategory": [
{
"categoryName": "Desk Lamps",
"totalSales": 37978
}
],
"revenue": 37978
},
"promotionEvents": [
{
"eventName": "Crazy Deal Days",
"promotionalDates": {
"startDate": {
"Year": 2023,
"Month": 9,
"Day": 27
},
"endDate": {
"Year": 2023,
"Month": 10,
"Day": 4
}
},
"discounts": [
{
"categoryName": "Desks",
"discountPercentage": 25
},
{
"categoryName": "Filing Cabinets",
"discountPercentage": 23
}
]
},
{
"eventName": "Incredible Markdown Mania",
"promotionalDates": {
"startDate": {
"Year": 2023,
"Month": 12,
"Day": 26
},
"endDate": {
"Year": 2024,
"Month": 1,
"Day": 2
}
},
"discounts": [
{
"categoryName": "Monitor Stands",
"discountPercentage": 20
},
{
"categoryName": "Desks",
"discountPercentage": 24
}
]
},
{
"eventName": "Major Deal Days",
"promotionalDates": {
"startDate": {
"Year": 2024,
"Month": 3,
"Day": 25
},
"endDate": {
"Year": 2024,
"Month": 4,
"Day": 2
}
},
"discounts": [
{
"categoryName": "Office Accessories",
"discountPercentage": 9
},
{
"categoryName": "Desks",
"discountPercentage": 13
}
]
},
{
"eventName": "Blowout Bonanza",
"promotionalDates": {
"startDate": {
"Year": 2024,
"Month": 6,
"Day": 23
},
"endDate": {
"Year": 2024,
"Month": 7,
"Day": 2
}
},
"discounts": [
{
"categoryName": "Office Chairs",
"discountPercentage": 24
},
{
"categoryName": "Desk Lamps",
"discountPercentage": 19
}
]
},
{
"eventName": "Super Saver Fiesta",
"promotionalDates": {
"startDate": {
"Year": 2024,
"Month": 9,
"Day": 21
},
"endDate": {
"Year": 2024,
"Month": 10,
"Day": 1
}
},
"discounts": [
{
"categoryName": "Desks",
"discountPercentage": 5
},
{
"categoryName": "Monitor Stands",
"discountPercentage": 10
}
]
}
],
"company": "Trey Research",
"city": "Lake Freeda",
"storeOpeningDate": "2024-12-30T22:55:25.779Z",
"lastUpdated": {
"t": 1729983325,
"i": 1
}
}
예제 1: 지정된 프로모션 이벤트에서 선택한 범주에 대한 할인 비율을 업데이트합니다.
이 쿼리는 이벤트 이름이 'Blowout Bonanza'인 프로모션 이벤트 배열의 특정 요소를 수정하여 'Desk Lamps' 범주에 대한 할인 비율을 업데이트합니다.
db.stores.updateOne(
{
_id: "905d1939-e03a-413e-a9c4-221f74055aac",
"promotionEvents.eventName": "Blowout Bonanza"
},
{
$set: {
"promotionEvents.$[event].discounts.$[discount].discountPercentage": 18
}
},
{
arrayFilters: [
{ "event.eventName": "Blowout Bonanza" },
{ "discount.categoryName": "Desk Lamps" }
]
}
)