이 섹션에서는 필드 이름에 마침표가 포함된 문서를 삽입, 쿼리 및 업데이트 방법을 요약하여 설명합니다. 일부 기능은 마침표가 포함된 필드에서 지원되지 않으므로 MongoDB 마침표가 포함된 필드 이름의 사용을 권장하지 않습니다. 자세한 내용은 일반 제한 사항 을 참조하세요.
참고
필드 이름에서 마침표로 구분된 단어 수를 255 미만으로 제한합니다. 더 많이 사용하려고 하면 MongoDB 오류를 반환합니다.
마침표가 있는 필드 이름 삽입
마침표가 있는 필드 이름을 포함하는 문서를 삽입하려면 필드 이름을 따옴표 안에 넣습니다.
다음 명령은 필드 이름 price.usd 이 포함된 문서 를 삽입합니다.
db.inventory.insertOne( { "item" : "sweatshirt", "price.usd": 45.99, "quantity": 20 } )
기간이 있는 필드 쿼리
마침표가 있는 필드를 쿼리하려면 $getField 연산자를 사용하세요.
다음 쿼리는 price.usd 필드가 40보다 큰 문서를 반환합니다.
db.inventory.find( { $expr: { $gt: [ { $getField: "price.usd" }, 40 ] } } )
[ { _id: ObjectId("66145f9bcb1d4abffd2f1b50"), item: 'sweatshirt', 'price.usd': 45.99, quantity: 20 } ]
$getField를 사용하지 않는 경우 MongoDB는 마침표가 있는 필드 이름을 내장된 객체로 취급합니다. 예를 들어, 다음 쿼리는 price 필드 내의 usd 필드가 40보다 큰 문서와 일치합니다.
db.inventory.find( { "price.usd": { $gt: 40 } } )
앞의 쿼리는 이 문서와 일치합니다.
{ "item" : "sweatshirt", "price": { "usd": 45.99 }, "quantity": 20 }
마침표가 있는 필드 업데이트
마침표가 있는 필드를 업데이트하려면 $setField 연산자와 함께 집계 파이프라인을 사용하세요.
다음 작업은 price.usd 필드를 29.99(으)로 설정합니다.
db.inventory.updateOne( { "item": "sweatshirt" }, [ { $replaceWith: { $setField: { field: "price.usd", input: "$$ROOT", value: 29.99 } } } ] )
$setField를 사용하지 않는 경우, MongoDB는 마침표가 있는 필드 이름을 내장된 객체로 취급합니다. 예를 들어, 다음 작업은 기존 price.usd 필드를 업데이트하지 않고 대신 price 필드에 내장된 새 필드 usd를 삽입합니다.
db.inventory.updateOne( { "item": "sweatshirt" }, { $set: { "price.usd": 29.99 } } )
결과 문서:
[ { _id: ObjectId("66145f9bcb1d4abffd2f1b50"), item: 'sweatshirt', 'price.usd': 45.99 quantity: 20, price: { usd: 29.99 } } ]
집계 파이프라인을 사용한 업데이트의 더 많은 예시는 집계 파이프라인을 사용한 업데이트를 참조하세요.
모호한 필드 이름 사용 자제
임베디드 필드에 대해 점 표기법과 동일한 필드 이름을 사용하지 마세요. 문서에 포함된 필드 { "a" : { "b": ... } }가 있는 경우, 해당 컬렉션의 다른 문서에는 최상위 필드 "a.b"가 없어야 합니다.
내장된 필드 와 최상위 필드 같은 방식으로 참조할 수 있다면 내장된 필드 에서 인덱싱 및 샤딩 작업이 발생합니다. 컬렉션 동일한 방식으로 참조하는 필드 포함되어 있는 동안에는 최상위 필드 "a.b" 에서 인덱스 하거나 샤드 할 수 없습니다.
예시 들어 컬렉션 내장된 필드 { "a" : { "b": ... } } 와 최상위 필드 "a.b"가 모두 있는 문서가 포함된 경우, 인덱싱 및 샤딩 작업은 내장된 필드 에서 발생합니다. 컬렉션 포함된 필드 { "a" : { "b": ... } }도 포함된 경우 최상위 필드 "a.b" 에서 인덱스 하거나 샤드 할 수 없습니다.