AI 에이전트의 경우: 문서 인덱스는 https://www.mongodb.com/ko-kr/docs/llms.txt에서 사용할 수 있으며, 모든 페이지의 마크다운 버전은 어떤 URL 경로에 .md를 추가하여 사용할 수 있습니다.
Docs Menu

달러 접두사가 붙은 필드 이름

이 섹션에서는 다양한 삽입 및 업데이트 작업에서 달러 기호($) 접두사가 붙은 필드 이름을 처리하다 방법을 요약하여 설명합니다. 일부 기능은 이러한 필드에서 지원되지 않으므로 MongoDB 달러 접두사가 붙은 필드 이름을 사용하는 것을 권장하지 않습니다. 자세한 내용은 일반 제한 사항 을 참조하세요.

달러 기호($) 접두사가 붙은 필드는 삽입 시 최상위 및 중첩 필드 이름으로 허용됩니다.

db.sales.insertOne( {
"$price": 50.00,
"quantity": 30
} )

예약어를 사용하는 삽입에는 달러($) 접두사가 붙은 필드가 허용됩니다. $inc 같은 연산자 이름과 id, db, ref 같은 단어도 필드 이름으로 사용할 수 있습니다.

db.books.insertOne( {
"$id": "h1961-01",
"location": {
"$db": "novels",
"$ref": "2007042768",
"$inc": true
} } )

업서트 중에 새 문서를 생성하는 업데이트는 필드 이름 유효성 검사에서 update가 아닌 insert로 처리됩니다. 업서트는 달러 기호($) 접두사가 붙은 필드를 사용할 수 있습니다. 그러나 업서트는 특수한 경우이므로 업데이트의 match 부분에서 기존 문서를 선택하면 유사한 업데이트 작업으로 인해 오류가 발생할 수 있습니다.

이 코드 샘플에는 upsert: true가 있으므로, 컬렉션에 쿼리 텀 { "date": "2021-07-07" }와 일치하는 문서가 아직 포함되어 있지 않은 경우 새 문서를 삽입합니다. 이 샘플 코드가 기존 문서와 일치하는 경우, $hotel에 달러($) 접두사가 있으므로 업데이트가 실패합니다.

db.expenses.updateOne(
{ "date": "2021-07-07" },
{ $set: {
"phone": 25.17,
"$hotel": 320.10
} },
{ upsert: true }
)

업데이트 연산자는 기존 필드를 새 문서로 바꾸거나 해당 필드를 수정합니다. 업데이트가 대체를 수행하는 경우, 달러($) 접두사가 붙은 필드는 최상위 필드 이름으로 허용되지 않습니다.

다음과 같은 문서를 예로 들어 보겠습니다.

{
"_id": "E123",
"address": {
"$number": 123,
"$street": "Elm Road"
},
"$rooms": {
"br": 2,
"bath": 1
}
}

기존 문서를 대체하는 업데이트 연산자를 사용하여 address.$street 필드를 수정할 수 있지만 $rooms 필드는 이러한 방식으로 업데이트할 수 없습니다.

db.housing.updateOne(
{ "_id": "E123" },
{ $set: { "address.$street": "Elm Ave" } }
)

집계 파이프라인의 일부로 $setField을(를) 사용하여 $rooms과(와) 같이 달러({8}) 접두사 필드가 있는 최상위를 업데이트합니다.

업데이트가 기존 문서 필드를 대체하는 것이 아니라 수정하는 경우, 접두사가 달러 기호($)로 시작하는 필드가 최상위 필드 이름이 될 수 있습니다. 하위 필드에 직접 액세스할 수 있지만 최상위 필드에 액세스하려면 헬퍼 메서드가 필요합니다.

다음 재고 기록과 같은 문서가 포함된 컬렉션을 가정해 보겠습니다.

{
_id: ObjectId("610023ad7d58ecda39b8d161"),
"part": "AB305",
"$bin": 200,
"quantity": 100,
"pricing": { sale: true, "$discount": 60 }
}

pricing.$discount 하위 필드를 직접 쿼리할 수 있습니다.

db.inventory.findAndModify( {
query: { "part": { $eq: "AB305" } },
update: { $inc: { "pricing.$discount": 10 } }
} )

$getField$literal을 사용하여 최상위 수준 $bin 필드의 값에 액세스합니다.

db.inventory.findAndModify( {
query: { $expr: {
$eq: [ { $getField: { $literal: "$bin" } }, 200 ]
} },
update: { $inc: { "quantity": 10 } }
} )

집계 파이프라인에서 미리 설정된 달러 필드($)를 수정하려면 $replaceWith 단계에서 $setField, $getField$literal 등을 사용합니다.

다음과 같은 학교 성적표 컬렉션을 고려해보세요.

db.school.insertOne (
{
"_id": 100001,
"$term": "fall",
"registered": true,
"grade": 4
} )

파이프라인을 사용하여 봄 학기에 대한 새 컬렉션을 만들고 달러 기호($) 접두사가 붙은 $term 필드를 업데이트합니다.

db.school.aggregate( [
{ $match: { "registered": true } },
{ $replaceWith: {
$setField: {
field: { $literal: "$term" },
input: "$$ROOT",
value: "spring"
} } },
{ $out: "spring2022" }
] )