์์ผ๋์นด๋ ์ธ๋ฑ์ค
์ด ํ์ด์ง์ ๋ด์ฉ
MongoDB๋ ์ฟผ๋ฆฌ๋ฅผ ์ง์ํ๊ธฐ ์ํด ํ๋ ๋๋ ํ๋ ์ธํธ์ ์ธ๋ฑ์ค๋ฅผ ์์ฑํ๋ ๊ฒ์ ์ง์ํฉ๋๋ค. MongoDB๋ ๋์ ์คํค๋ง๋ฅผ ์ง์ํ๋ฏ๋ก ์ ํ๋ฆฌ์ผ์ด์ ์ ์ด๋ฆ์ ๋ฏธ๋ฆฌ ์ ์ ์๊ฑฐ๋ ์์์ ์ธ ํ๋๋ฅผ ์ฟผ๋ฆฌํ ์ ์์ต๋๋ค.
MongoDB ๋ฒ์ 4.2์ ์๋ก์ด ๊ธฐ๋ฅ
MongoDB 4.2์๋ ์ ์ ์๊ฑฐ๋ ์์์ ํ๋์ ๋ํ ์ฟผ๋ฆฌ๋ฅผ ์ง์ํ๊ธฐ ์ํ ์์ผ๋์นด๋ ์ธ๋ฑ์ค๊ฐ ๋์ ๋์์ต๋๋ค.
userMetadata
ํ๋ ์๋์์ ์ฌ์ฉ์ ์ ์ ๋ฐ์ดํฐ๋ฅผ ์บก์ฒํ๊ณ ํด๋น ๋ฐ์ดํฐ์ ๋ํ ์ฟผ๋ฆฌ๋ฅผ ์ง์ํ๋ ์ ํ๋ฆฌ์ผ์ด์
์ ์๊ฐํด ๋ณด์ธ์.
{ "userMetadata" : { "likes" : [ "dogs", "cats" ] } } { "userMetadata" : { "dislikes" : "pickles" } } { "userMetadata" : { "age" : 45 } } { "userMetadata" : "inactive" }
๊ด๋ฆฌ์๋ userMetadata
์ ๋ชจ๋ ํ์ ํ๋์ ๋ํ ์ฟผ๋ฆฌ๋ฅผ ์ง์ํ๋ ์ธ๋ฑ์ค๋ฅผ ๋ง๋ค๊ณ ์ ํฉ๋๋ค.
userMetadata
์ ๋ํ ์์ผ๋์นด๋ ์ธ๋ฑ์ค๋ userMetadata
, userMetadata.likes
, userMetadata.dislikes
๋ฐ userMetadata.age
์ ๋ํ ๋จ์ผ ํ๋ ์ฟผ๋ฆฌ๋ฅผ ์ง์ํ ์ ์์ต๋๋ค.
db.userData.createIndex( { "userMetadata.$**" : 1 } )
์ธ๋ฑ์ค๋ ๋ค์ ์ฟผ๋ฆฌ๋ฅผ ์ง์ํ ์ ์์ต๋๋ค.
db.userData.find({ "userMetadata.likes" : "dogs" }) db.userData.find({ "userMetadata.dislikes" : "pickles" }) db.userData.find({ "userMetadata.age" : { $gt : 30 } }) db.userData.find({ "userMetadata" : "inactive" })
userMetadata
์ ๋ํ ์์ผ๋์นด๋๊ฐ ์๋ ์ธ๋ฑ์ค๋ userMetadata
๊ฐ์ ๋ํ ์ฟผ๋ฆฌ๋ง ์ง์ํ ์ ์์ต๋๋ค.
์ค์
์์ผ๋์นด๋ ์ธ๋ฑ์ค๋ ์ํฌ๋ก๋ ๊ธฐ๋ฐ ์ธ๋ฑ์ค ๊ณํ์ ๋์ฒดํ๋๋ก ์ค๊ณ๋์ง ์์์ต๋๋ค. ์ฟผ๋ฆฌ๋ฅผ ์ง์ํ๋ ์ธ๋ฑ์ค๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ ๋ํ ์์ธํ ๋ด์ฉ์ ์ฟผ๋ฆฌ๋ฅผ ์ง์ํ๋์ธ๋ฑ์ค ๋ง๋ค๊ธฐ ๋ฅผ ์ฐธ์กฐํ์ธ์. ์์ผ๋์นด๋ ์ธ๋ฑ์ค ์ ํ์ ๋ํ ์ ์ฒด ๋ฌธ์๋ ์์ผ๋์นด๋ ์ธ๋ฑ์ค ์ ํ์ ์ฐธ์กฐํ์ธ์ .
์์ผ๋์นด๋ ์ธ๋ฑ์ค ๋ง๋ค๊ธฐ
์ค์
์์ผ๋์นด๋ ์ธ๋ฑ์ค๋ฅผ ์์ฑํ๋ ค๋ฉด mongod
featureCompatibilityVersion ์ด 4.2
์ฌ์ผ ํฉ๋๋ค. fCV ์ค์ ์ ๋ํ ์ง์นจ์ MongoDB 6.0 ๋ฐฐํฌ์์ ๊ธฐ๋ฅ ํธํ์ฑ ๋ฒ์ ์ค์ ์ ์ฐธ์กฐํ์ธ์.
createIndexes
๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ช
๋ น ๋๋ ํด๋น shell ํฌํผ์ธ createIndex()
๋๋ createIndexes()
์ ์ฌ์ฉํ์ฌ ์์ผ๋์นด๋ ์ธ๋ฑ์ค๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
ํ๋์ ์์ผ๋์นด๋ ์ธ๋ฑ์ค ๋ง๋ค๊ธฐ
ํน์ ํ๋์ ๊ฐ์ ์ธ๋ฑ์ฑํ๋ ค๋ฉด ๋ค์์ ์ํํฉ๋๋ค.
db.collection.createIndex( { "fieldA.$**" : 1 } )
์ด ์์ผ๋์นด๋ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๋ฉด MongoDB๋ fieldA
์ ๋ชจ๋ ๊ฐ์ ์ธ๋ฑ์ฑํฉ๋๋ค. ํ๋๊ฐ ์ค์ฒฉ๋ ๋ฌธ์ ๋๋ ๋ฐฐ์ด์ธ ๊ฒฝ์ฐ ์์ผ๋์นด๋ ์ธ๋ฑ์ค๋ ๋ฌธ์/๋ฐฐ์ด์ ์ฌ๊ท๋์ด ๋ฌธ์/๋ฐฐ์ด์ ๋ชจ๋ ํ๋์ ๋ํ ๊ฐ์ ์ ์ฅํฉ๋๋ค.
์๋ฅผ ๋ค์ด product_catalog
์ปฌ๋ ์
์ ๋ฌธ์์ product_attributes
ํ๋๊ฐ ํฌํจ๋ ์ ์์ต๋๋ค. product_attributes
ํ๋์๋ ๋ด์ฅ๋ ๋ฌธ์ ๋ฐ ๋ฐฐ์ด์ ํฌํจํ์ฌ ์์์ ์ค์ฒฉ ํ๋๊ฐ ํฌํจ๋ ์ ์์ต๋๋ค.
{ "product_name" : "Spy Coat", "product_attributes" : { "material" : [ "Tweed", "Wool", "Leather" ] "size" : { "length" : 72, "units" : "inches" } } } { "product_name" : "Spy Pen", "product_attributes" : { "colors" : [ "Blue", "Black" ], "secret_feature" : { "name" : "laser", "power" : "1000", "units" : "watts", } } }
๋ค์ ์์
์ product_attributes
ํ๋์ ์์ผ๋์นด๋ ์ธ๋ฑ์ค๋ฅผ ์์ฑํฉ๋๋ค.
db.products_catalog.createIndex( { "product_attributes.$**" : 1 } )
์์ผ๋์นด๋ ์ธ๋ฑ์ค๋ product_attributes
๋๋ ํฌํจ๋ ํ๋์ ๋ํ ์์์ ๋จ์ผ ํ๋ ์ฟผ๋ฆฌ๋ฅผ ์ง์ํ ์ ์์ต๋๋ค.
db.products_catalog.find( { "product_attributes.size.length" : { $gt : 60 } } ) db.products_catalog.find( { "product_attributes.material" : "Leather" } ) db.products_catalog.find( { "product_attributes.secret_feature.name" : "laser" } )
์ฐธ๊ณ
๊ฒฝ๋ก๋ณ ์์ผ๋์นด๋ ์ธ๋ฑ์ค ๊ตฌ๋ฌธ์ wildcardProjection
์ต์
๊ณผ ํธํ๋์ง ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ wildcard
์ธ๋ฑ์ค์ ๋ํ ์ต์
์ ์ฐธ์กฐํ์ธ์.
์์ ๋ ๋จ์ผ ํ๋ ๊ฒฝ๋ก์ ์์ผ๋์นด๋ ์ธ๋ฑ์ค ์์ฑ์ ์ฐธ์กฐํ์ธ์.
๋ชจ๋ ํ๋์ ์์ผ๋์นด๋ ์ธ๋ฑ์ค ๋ง๋ค๊ธฐ
๋ฌธ์์ ๋ชจ๋ ํ๋ ๊ฐ( _id
์ ์ธ)์ ์ธ๋ฑ์คํ๋ ค๋ฉด "$**"
์(๋ฅผ) ์ธ๋ฑ์ค ํค๋ก ์ง์ ํฉ๋๋ค.
db.collection.createIndex( { "$**" : 1 } )
MongoDB๋ ์ด ์์ผ๋์นด๋ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ฌ collection์ ๊ฐ ๋ฌธ์์ ๋ํ ๋ชจ๋ ํ๋๋ฅผ ์ธ๋ฑ์ฑํฉ๋๋ค. ์ง์ ๋ ํ๋๊ฐ ์ค์ฒฉ๋ ๋ฌธ์ ๋๋ ๋ฐฐ์ด์ธ ๊ฒฝ์ฐ ์์ผ๋์นด๋ ์ธ๋ฑ์ค๋ ๋ฌธ์/๋ฐฐ์ด์ ์ฌ๊ท๋์ด ๋ฌธ์/๋ฐฐ์ด์ ๋ชจ๋ ํ๋์ ๋ํ ๊ฐ์ ์ ์ฅํฉ๋๋ค.
์์ ๋ ๋ชจ๋ ํ๋ ๊ฒฝ๋ก์ ์์ผ๋์นด๋ ์ธ๋ฑ์ค ์์ฑํ๊ธฐ ํญ๋ชฉ์ ์ฐธ์กฐํ์ธ์.
์ฐธ๊ณ
์์ผ๋์นด๋ ์ธ๋ฑ์ค๋ ๊ธฐ๋ณธ์ ์ผ๋ก _id
ํ๋๋ฅผ ์๋ตํฉ๋๋ค. ์์ผ๋์นด๋ ์ธ๋ฑ์ค์ _id
ํ๋๋ฅผ ํฌํจํ๋ ค๋ฉด ํด๋น ํ๋๋ฅผ wildcardProjection
๋ฌธ์์ ๋ช
์์ ์ผ๋ก ํฌํจํด์ผ ํฉ๋๋ค. ์์ธํ ๋ด์ฉ ์ wildcard
์ธ๋ฑ์ค ์ต์
์ ์ฐธ์กฐํ์ธ์.
์ฌ๋ฌ ํน์ ํ๋์ ์์ผ๋์นด๋ ์ธ๋ฑ์ค ๋ง๋ค๊ธฐ
๋ฌธ์์์ ์ฌ๋ฌ ํน์ ํ๋์ ๊ฐ์ ์ธ๋ฑ์ฑํ๋ ค๋ฉด ๋ค์์ ์ํํฉ๋๋ค.
db.collection.createIndex( { "$**" : 1 }, { "wildcardProjection" : { "fieldA" : 1, "fieldB.fieldC" : 1 } } )
MongoDB๋ ์ด ์์ผ๋์นด๋ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ฌ collection์ ๊ฐ ๋ฌธ์์ ์ง์ ๋ ํ๋์ ๋ํ ๋ชจ๋ ๊ฐ์ ์ธ๋ฑ์ฑํฉ๋๋ค. ์ง์ ๋ ํ๋๊ฐ ์ค์ฒฉ๋ ๋ฌธ์ ๋๋ ๋ฐฐ์ด์ธ ๊ฒฝ์ฐ ์์ผ๋์นด๋ ์ธ๋ฑ์ค๋ ๋ฌธ์/๋ฐฐ์ด์ ์ฌ๊ท๋์ด ๋ฌธ์/๋ฐฐ์ด์ ๋ชจ๋ ํ๋์ ๋ํ ๊ฐ์ ์ ์ฅํฉ๋๋ค.
์ฐธ๊ณ
์์ผ๋์นด๋ ์ธ๋ฑ์ค๋ _id
ํ๋๋ฅผ ๋ช
์์ ์ผ๋ก ํฌํจํ๋ ๊ฒฝ์ฐ๋ฅผ ์ ์ธํ๊ณ wildcardProjection
๋ฌธ์์์ ํฌํจ ๋ฐ ์ ์ธ ๋ฌธ์ ํผํฉํ๋ ๊ฒ์ ์ง์ํ์ง ์์ต๋๋ค. wildcardProjection
์ ๋ํ ์์ธํ ๋ด์ฉ ์ wildcard
์ธ๋ฑ์ค ์ต์
์ ์ฐธ์กฐ ํ์ธ์ .
์์ ๋ ์์ผ๋์นด๋ ์ธ๋ฑ์ค ์ปค๋ฒ๋ฆฌ์ง์ ํน์ ํ๋ ํฌํจ์ ์ฐธ์กฐํ์ธ์.
์ฌ๋ฌ ํน์ ํ๋๋ฅผ ์ ์ธํ๋ ์์ผ๋์นด๋ ์ธ๋ฑ์ค ๋ง๋ค๊ธฐ
ํน์ ํ๋ ๊ฒฝ๋ก๋ฅผ ์ ์ธํ ๋ฌธ์ ๋ด ๋ชจ๋ ํ๋์ ํ๋๋ฅผ ์ธ๋ฑ์ฑํ๋ ค๋ฉด ๋ค์์ ์ํํฉ๋๋ค.
db.collection.createIndex( { "$**" : 1 }, { "wildcardProjection" : { "fieldA" : 0, "fieldB.fieldC" : 0 } } )
MongoDB๋ ์ด ์์ผ๋์นด๋ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ฌ ์ง์ ๋ ํ๋ ๊ฒฝ๋ก๋ฅผ ์ ์ธํ ์ปฌ๋ ์ ์ ๊ฐ ๋ฌธ์์ ๋ํ ๋ชจ๋ ํ๋๋ฅผ ์ธ๋ฑ์ฑํฉ๋๋ค. ์ง์ ๋ ํ๋๊ฐ ์ค์ฒฉ๋ ๋ฌธ์ ๋๋ ๋ฐฐ์ด์ธ ๊ฒฝ์ฐ ์์ผ๋์นด๋ ์ธ๋ฑ์ค๋ ๋ฌธ์/๋ฐฐ์ด์ ์ฌ๊ท๋์ด ๋ฌธ์/๋ฐฐ์ด์ ๋ชจ๋ ํ๋์ ๋ํ ๊ฐ์ ์ ์ฅํฉ๋๋ค.
์์ ๋ ์์ผ๋์นด๋ ์ธ๋ฑ์ค ์ปค๋ฒ๋ฆฌ์ง์์ ํน์ ํ๋ ์๋ต์ ์ฐธ์กฐํ์ธ์.
์ฐธ๊ณ
์์ผ๋์นด๋ ์ธ๋ฑ์ค๋ _id
ํ๋๋ฅผ ๋ช
์์ ์ผ๋ก ํฌํจํ๋ ๊ฒฝ์ฐ๋ฅผ ์ ์ธํ๊ณ wildcardProjection
๋ฌธ์์์ ํฌํจ ๋ฐ ์ ์ธ ๋ฌธ์ ํผํฉํ๋ ๊ฒ์ ์ง์ํ์ง ์์ต๋๋ค. wildcardProjection
์ ๋ํ ์์ธํ ๋ด์ฉ ์ wildcard
์ธ๋ฑ์ค ์ต์
์ ์ฐธ์กฐ ํ์ธ์ .
๊ณ ๋ ค ์ฌํญ
์์ผ๋์นด๋ ์ธ๋ฑ์ค๋ ์ฃผ์ด์ง ์ฟผ๋ฆฌ ์กฐ๊ฑด์์์ ์ต๋ ํ๋ ์ ํ๋๋ฅผ ์ง์ํ ์ ์์ต๋๋ค. ์์ผ๋์นด๋ ์ธ๋ฑ์ค ์ฟผ๋ฆฌ ์ง์์ ๋ํ ์์ธํ ๋ด์ฉ์ ์์ผ๋์นด๋ ์ธ๋ฑ์ค ์ฟผ๋ฆฌ/์ ๋ ฌ ์ง์์ ์ฐธ์กฐํ์ธ์.
์์ผ๋์นด๋ ์ธ๋ฑ์ค๋ฅผ ์์ฑํ๋ ค๋ฉด
mongod
featureCompatibilityVersion ์ด4.2
์ฌ์ผ ํฉ๋๋ค. fCV ์ค์ ์ ๋ํ ์ง์นจ์ MongoDB 6.0 ๋ฐฐํฌ์์ ๊ธฐ๋ฅ ํธํ์ฑ ๋ฒ์ ์ค์ ์ ์ฐธ์กฐํ์ธ์.์์ผ๋์นด๋ ์ธ๋ฑ์ค๋ ๊ธฐ๋ณธ์ ์ผ๋ก _id ํ๋๋ฅผ ์๋ตํฉ๋๋ค. ์์ผ๋์นด๋ ์ธ๋ฑ์ค์
_id
ํ๋๋ฅผ ํฌํจํ๋ ค๋ฉด ์์ผ๋์นด๋ ํ๋ก์ ํธ ๋ฌธ์์ ๋ช ์์ ์ผ๋ก ํฌํจํด์ผ ํฉ๋๋ค(์:{ "_id" : 1 }
).์ปฌ๋ ์ ์ ์ฌ๋ฌ ๊ฐ์ ์์ผ๋์นด๋ ์ธ๋ฑ์ค๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.
์์ผ๋์นด๋ ์ธ๋ฑ์ค๋ collection์ ๋ค๋ฅธ ์ธ๋ฑ์ค์ ๋์ผํ ํ๋๋ฅผ ํฌํจํ ์ ์์ต๋๋ค.
์์ผ๋์นด๋ ์ธ๋ฑ์ค๋ ํฌ์ ์ธ๋ฑ์ค(sparse indexes) ๋ก ๋ถ๋ฅ๋๋ฉฐ, ์ธ๋ฑ์ค๋ ํ๋๊ฐ ์๋ ๋ฌธ์์ ๋ํ ํญ๋ชฉ๋ง ํฌํจํฉ๋๋ค. ์ด๋ ์ธ๋ฑ์ค ํ๋์ null ๊ฐ์ด ํฌํจ๋์ด ์๋๋ผ๋ ๋ง์ฐฌ๊ฐ์ง์ ๋๋ค.
ํ๋
์์ผ๋์นด๋ ์ธ๋ฑ์ค๋ ๊ฐ์ฒด(์: ๋ด์ฅ๋ ๋ฌธ์) ๋๋ ๋ฐฐ์ด์ธ ํ๋๋ฅผ ์ธ๋ฑ์ฑํ ๋ ํน์ ๋์์ ํฉ๋๋ค.
ํ๋๊ฐ ๊ฐ์ฒด์ธ ๊ฒฝ์ฐ ์์ผ๋์นด๋ ์ธ๋ฑ์ค๋ ๊ฐ์ฒด๋ก ๋ด๋ ค๊ฐ ๊ทธ ๋ด์ฉ์ ์ธ๋ฑ์ฑํฉ๋๋ค. ์์ผ๋์นด๋ ์ธ๋ฑ์ค๋ ๋ฐ๊ฒฌ๋๋ ์ถ๊ฐ๋ก ๋ด์ฅ๋ ๋ฌธ์๋ก ๊ณ์ ๋ด๋ ค๊ฐ๋๋ค.
ํ๋๊ฐ ๋ฐฐ์ด์ธ ๊ฒฝ์ฐ ์์ผ๋์นด๋ ์ธ๋ฑ์ค๋ ๋ฐฐ์ด์ ์ํํ๊ณ ๊ฐ ์์๋ฅผ ์ธ๋ฑ์ฑํฉ๋๋ค.
๋ฐฐ์ด์ ์์๊ฐ ๊ฐ์ฒด์ธ ๊ฒฝ์ฐ ์์ผ๋์นด๋ ์ธ๋ฑ์ค๋ ์์์ ์ค๋ช ํ ๋๋ก ๊ฐ์ฒด๋ก ๋ด๋ ค๊ฐ ํด๋น ๋ด์ฉ์ ์ธ๋ฑ์ฑํฉ๋๋ค.
์์๊ฐ ๋ฐฐ์ด, ์ฆ ์์ ๋ฐฐ์ด ๋ด์ ์ง์ ํฌํจ๋ ๋ฐฐ์ด์ธ ๊ฒฝ์ฐ ์์ผ๋์นด๋ ์ธ๋ฑ์ค๋ ํฌํจ๋ ๋ฐฐ์ด์ ์ํํ์ง ์๊ณ ์ ์ฒด ๋ฐฐ์ด์ ๋จ์ผ ๊ฐ์ผ๋ก ์ธ๋ฑ์ฑํฉ๋๋ค.
๋ค๋ฅธ ๋ชจ๋ ํ๋์ ๊ฒฝ์ฐ ๊ธฐ๋ณธ(๋น๊ฐ์ฒด/๋ฐฐ์ด) ๊ฐ์ ์ธ๋ฑ์ค์ ๊ธฐ๋กํฉ๋๋ค.
์์ผ๋์นด๋ ์ธ๋ฑ์ค๋ ๊ธฐ๋ณธ ๊ฐ(์ฆ, ๊ฐ์ฒด๋ ๋ฐฐ์ด์ด ์๋ ํ๋)์ ๋๋ฌํ ๋๊น์ง ์ถ๊ฐ๋ก ์ค์ฒฉ๋ ๊ฐ์ฒด ๋๋ ๋ฐฐ์ด์ ๊ณ์ ์ํํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ํด๋น ํ๋์ ์ ์ฒด ๊ฒฝ๋ก์ ํจ๊ป ์ด ๊ธฐ๋ณธ ๊ฐ์ ์ธ๋ฑ์ฑํฉ๋๋ค.
์๋ฅผ ๋ค์ด ๋ค์ ๋ฌธ์๋ฅผ ์ดํด๋ณด์ธ์.
{ "parentField" : { "nestedField" : "nestedValue", "nestedObject" : { "deeplyNestedField" : "deeplyNestedValue" }, "nestedArray" : [ "nestedArrayElementOne", [ "nestedArrayElementTwo" ] ] } }
parentField
๊ฐ ํฌํจ๋ ์์ผ๋์นด๋ ์ธ๋ฑ์ค๋ ๋ค์ ํญ๋ชฉ์ ๊ธฐ๋กํฉ๋๋ค.
"parentField.nestedField" : "nestedValue"
"parentField.nestedObject.deeplyNestedField" : "deeplyNestedValue"
"parentField.nestedArray" : "nestedArrayElementOne"
"parentField.nestedArray" : ["nestedArrayElementTwo"]
parentField.nestedArray
์ ๋ ์ฝ๋์๋ ๊ฐ ์์์ ๋ฐฐ์ด ์์น๊ฐ ํฌํจ๋์ด ์์ง ์์ต๋๋ค. ์์ผ๋์นด๋ ์ธ๋ฑ์ค๋ ์์๋ฅผ ์ธ๋ฑ์ค์ ๊ธฐ๋กํ ๋ ๋ฐฐ์ด ์์ ์์น๋ฅผ ๋ฌด์ํฉ๋๋ค. ์์ผ๋์นด๋ ์ธ๋ฑ์ค๋ ๋ช
์์ ๋ฐฐ์ด ์ธ๋ฑ์ค๋ฅผ ํฌํจํ๋ ์ฟผ๋ฆฌ๋ฅผ ๊ณ์ ์ง์ํ ์ ์์ต๋๋ค. ์์ธํ ๋ด์ฉ ์ ๋ช
์์ ๋ฐฐ์ด ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ ์ฟผ๋ฆฌ๋ฅผ ์ฐธ์กฐํ์ธ์.
์ค์ฒฉ๋ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ ์์ผ๋์นด๋ ์ธ๋ฑ์ค ๋์์ ๋ํ ์์ธํ ๋ด์ฉ์ ์ค์ฒฉ๋ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ์ธ์ .
์ค์ฒฉ ๋ฐฐ์ด์ ์ฌ์ฉํ ์์ผ๋์นด๋ ์ธ๋ฑ์ค ๋์์ ๋ํ ์์ธํ ๋ด์ฉ์ ์ค์ฒฉ ๋ฐฐ์ด์ ์ฐธ์กฐํ์ธ์ .
์ค์ฒฉ๋ ๊ฐ์ฒด
์์ผ๋์นด๋ ์ธ๋ฑ์ค๋ ์ค์ฒฉ๋ ๊ฐ์ฒด๋ฅผ ๋ง๋๋ฉด ๊ฐ์ฒด๋ก ๋ด๋ ค๊ฐ ๋ด์ฉ์ ์ธ๋ฑ์ฑํฉ๋๋ค. ์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
{ "parentField" : { "nestedField" : "nestedValue", "nestedArray" : ["nestedElement"] "nestedObject" : { "deeplyNestedField" : "deeplyNestedValue" } } }
parentField
๊ฐ ํฌํจ๋ ์์ผ๋์นด๋ ์ธ๋ฑ์ค๋ ๊ฐ์ฒด๋ก ๋ด๋ ค๊ฐ ํด๋น ์ฝํ
์ธ ๋ฅผ ํ์ํ๊ณ ์ธ๋ฑ์ฑํฉ๋๋ค.
์์ฒด๊ฐ ๊ฐ์ฒด์ธ ๊ฐ ํ๋(์ฆ, ๋ด์ฅ๋ ๋ฌธ์)์ ๋ํด ๊ฐ์ฒด๋ก ๋ด๋ ค๊ฐ์ ํด๋น ๋ด์ฉ์ ์ธ๋ฑ์ฑํฉ๋๋ค.
๋ฐฐ์ด์ธ ๊ฐ ํ๋์ ๋ํด ๋ฐฐ์ด์ ์ํํ๊ณ ํด๋น ๋ด์ฉ์ ์ธ๋ฑ์ฑํฉ๋๋ค.
๋ค๋ฅธ ๋ชจ๋ ํ๋์ ๊ฒฝ์ฐ ๊ธฐ๋ณธ(๋น๊ฐ์ฒด/๋ฐฐ์ด) ๊ฐ์ ์ธ๋ฑ์ค์ ๊ธฐ๋กํฉ๋๋ค.
์์ผ๋์นด๋ ์ธ๋ฑ์ค๋ ๊ธฐ๋ณธ ๊ฐ(์ฆ, ๊ฐ์ฒด๋ ๋ฐฐ์ด์ด ์๋ ํ๋)์ ๋๋ฌํ ๋๊น์ง ์ถ๊ฐ๋ก ์ค์ฒฉ๋ ๊ฐ์ฒด ๋๋ ๋ฐฐ์ด์ ๊ณ์ ์ํํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ํด๋น ํ๋์ ์ ์ฒด ๊ฒฝ๋ก์ ํจ๊ป ์ด ๊ธฐ๋ณธ ๊ฐ์ ์ธ๋ฑ์ฑํฉ๋๋ค.
์ํ ๋ฌธ์๊ฐ ์ฃผ์ด์ง๋ฉด ์์ผ๋์นด๋ ์ธ๋ฑ์ค๋ ๋ค์ ๊ธฐ๋ก์ ์ธ๋ฑ์ค์ ์ถ๊ฐํฉ๋๋ค.
"parentField.nestedField" : "nestedValue"
"parentField.nestedObject.deeplyNestedField" : "deeplyNestedValue"
"parentField.nestedArray" : "nestedElement"
์ค์ฒฉ ๋ฐฐ์ด์ ์ฌ์ฉํ ์์ผ๋์นด๋ ์ธ๋ฑ์ค ๋์์ ๋ํ ์์ธํ ๋ด์ฉ์ ์ค์ฒฉ ๋ฐฐ์ด์ ์ฐธ์กฐํ์ธ์ .
์ค์ฒฉ ๋ฐฐ์ด
์์ผ๋์นด๋ ์ธ๋ฑ์ค๋ ์ค์ฒฉ ๋ฐฐ์ด์ ๋ฐ๊ฒฌํ๋ฉด ๋ฐฐ์ด์ ํ์ํ์ฌ ํด๋น ์์๋ฅผ ์ธ๋ฑ์ฑํ๋ ค๊ณ ์๋ํฉ๋๋ค. ๋ฐฐ์ด ์์ฒด๊ฐ ์์ ๋ฐฐ์ด(์: ๋ด์ฅ๋ ๋ฐฐ์ด)์ ์์์ธ ๊ฒฝ์ฐ ์์ผ๋์นด๋ ์ธ๋ฑ์ค๋ ๋์ ๋ฐฐ์ด์ ๋ด์ฉ์ ํ์ํ๋ ๋์ ์ ์ฒด ๋ฐฐ์ด์ ๊ฐ์ผ๋ก ๊ธฐ๋กํฉ๋๋ค. ์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
{ "parentArray" : [ "arrayElementOne", [ "embeddedArrayElement" ], "nestedObject" : { "nestedArray" : [ "nestedArrayElementOne", "nestedArrayElementTwo" ] } ] }
parentArray
๊ฐ ํฌํจ๋ ์์ผ๋์นด๋ ์ธ๋ฑ์ค๋ ๋ฐฐ์ด๋ก ๋ด๋ ค๊ฐ ํด๋น ๋ด์ฉ์ ํ์ํ๊ณ ์ธ๋ฑ์ฑํฉ๋๋ค.
๋ฐฐ์ด์ธ ๊ฐ ์์(์: ๋ด์ฅ๋ ๋ฐฐ์ด)์ ๋ํด ์ ์ฒด ๋ฐฐ์ด์ ๊ฐ์ผ๋ก ์ธ๋ฑ์คํฉ๋๋ค.
๊ฐ์ฒด์ธ ๊ฐ ์์์ ๋ํด ๊ฐ์ฒด๋ก ๋ด๋ ค๊ฐ ํด๋น ๋ด์ฉ์ ํ์ํ๊ณ ์ธ๋ฑ์ฑํฉ๋๋ค.
๋ค๋ฅธ ๋ชจ๋ ํ๋์ ๊ฒฝ์ฐ ๊ธฐ๋ณธ(๋น๊ฐ์ฒด/๋ฐฐ์ด) ๊ฐ์ ์ธ๋ฑ์ค์ ๊ธฐ๋กํฉ๋๋ค.
์์ผ๋์นด๋ ์ธ๋ฑ์ค๋ ๊ธฐ๋ณธ ๊ฐ(์ฆ, ๊ฐ์ฒด๋ ๋ฐฐ์ด์ด ์๋ ํ๋)์ ๋๋ฌํ ๋๊น์ง ์ถ๊ฐ๋ก ์ค์ฒฉ๋ ๊ฐ์ฒด ๋๋ ๋ฐฐ์ด์ ๊ณ์ ์ํํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ํด๋น ํ๋์ ์ ์ฒด ๊ฒฝ๋ก์ ํจ๊ป ์ด ๊ธฐ๋ณธ ๊ฐ์ ์ธ๋ฑ์ฑํฉ๋๋ค.
์ํ ๋ฌธ์๊ฐ ์ฃผ์ด์ง๋ฉด ์์ผ๋์นด๋ ์ธ๋ฑ์ค๋ ๋ค์ ๊ธฐ๋ก์ ์ธ๋ฑ์ค์ ์ถ๊ฐํฉ๋๋ค.
"parentArray" : "arrayElementOne"
"parentArray" : ["embeddedArrayElement"]
"parentArray.nestedObject.nestedArray" : "nestedArrayElementOne"
"parentArray.nestedObject.nestedArray" : "nestedArrayElementTwo"
parentField.nestedArray
์ ๋ ์ฝ๋์๋ ๊ฐ ์์์ ๋ฐฐ์ด ์์น๊ฐ ํฌํจ๋์ด ์์ง ์์ต๋๋ค. ์์ผ๋์นด๋ ์ธ๋ฑ์ค๋ ์์๋ฅผ ์ธ๋ฑ์ค์ ๊ธฐ๋กํ ๋ ๋ฐฐ์ด ์์ ์์น๋ฅผ ๋ฌด์ํฉ๋๋ค. ์์ผ๋์นด๋ ์ธ๋ฑ์ค๋ ๋ช
์์ ๋ฐฐ์ด ์ธ๋ฑ์ค๋ฅผ ํฌํจํ๋ ์ฟผ๋ฆฌ๋ฅผ ๊ณ์ ์ง์ํ ์ ์์ต๋๋ค. ์์ธํ ๋ด์ฉ ์ ๋ช
์์ ๋ฐฐ์ด ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ ์ฟผ๋ฆฌ๋ฅผ ์ฐธ์กฐํ์ธ์.
์ธ๋ฑ์ค ํ์
MongoDB 6.3, 6.0.5 ๋ฐ 5.0.16๋ถํฐ wildcardProjection
ํ๋๋ ์ธ๋ฑ์ค ํ๋ก์ ์
์ ์ ์ถ๋ ํ์์ผ๋ก ์ ์ฅํฉ๋๋ค. ์ด์ ๋ฒ์ ์ ์๋ฒ์์๋ ํ๋ก์ ์
์ ์ ๊ทํ๋ ํํ๋ก ์ ์ฅํ์ ์ ์์ต๋๋ค.
์๋ฒ๋ ์ธ๋ฑ์ค๋ฅผ ๋์ผํ ๋ฐฉ์์ผ๋ก ์ฌ์ฉํ์ง๋ง listIndexes
๋ฐ db.collection.getIndexes()
๋ช
๋ น์ ์ถ๋ ฅ์ ์ฐจ์ด๊ฐ ์์ ์ ์์ต๋๋ค.
์ ํ ์ฌํญ
์์ผ๋์นด๋ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ฌ collection์ ์ค๋ฉํ ์ ์์ต๋๋ค. ์ค๋ฉํ๋ ค๋ ํ๋์ ์์ผ๋์นด๋๊ฐ ์๋ ์ธ๋ฑ์ค๋ฅผ ์์ฑํฉ๋๋ค. ์ค๋ ํค ์ ํ์ ๋ํ ์์ธํ ๋ด์ฉ์ ์ค๋ ํค๋ฅผ ์ฐธ์กฐํ์ธ์ .
๋ณตํฉ ์ธ๋ฑ์ค ๋ ์์ฑํ ์ ์์ต๋๋ค.
์์ผ๋์นด๋ ์ธ๋ฑ์ค์๋ ๋ค์ ์์ฑ์ ์ง์ ํ ์ ์์ต๋๋ค.
์์ผ๋์นด๋ ๊ตฌ๋ฌธ์ ์ฌ์ฉํ์ฌ ๋ค์ ์ธ๋ฑ์ค ์ ํ์ ์์ฑํ ์ ์์ต๋๋ค.
์ค์
์์ผ๋์นด๋ ์ธ๋ฑ์ค๋ ์์ผ๋์นด๋ ํ
์คํธ ์ธ๋ฑ์ค์ ๊ตฌ๋ณ๋๋ฉฐ ํธํ๋์ง ์์ต๋๋ค. ์์ผ๋์นด๋ ์ธ๋ฑ์ค๋ $text
์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๋ ์ฟผ๋ฆฌ๋ฅผ ์ง์ํ ์ ์์ต๋๋ค.
์์ผ๋์นด๋ ์ธ๋ฑ์ค ์์ฑ ์ ํ์ ๋ํ ์ ์ฒด ๋ฌธ์๋ ํธํ๋์ง ์๋ ์ธ๋ฑ์ค ์ ํ ๋๋ ์์ฑ์ ์ฐธ์กฐํ์ธ์.
์์ผ๋์นด๋ ์ธ๋ฑ์ค ์ฟผ๋ฆฌ/์ ๋ ฌ ์ง์
์ง์๋๋ ์ฟผ๋ฆฌ
์์ผ๋์นด๋ ์ธ๋ฑ์ค๋ ๋ค์์ด ๋ชจ๋ ์ฐธ์ธ ๊ฒฝ์ฐ์๋ง ํด๋น ์ฟผ๋ฆฌ ๋ฅผ ์ง์ํ ์ ์์ต๋๋ค.
์ฟผ๋ฆฌ ํ๋๋๋ ์ฟผ๋ฆฌ ์กฐ๊ฑด์๋ฅผ ์ถฉ์กฑํ๊ธฐ ์ํด ์์ผ๋์นด๋ ์ธ๋ฑ์ค๋ฅผ ์ ํํฉ๋๋ค.
์ฟผ๋ฆฌ ์กฐ๊ฑด์๋ ์์ผ๋์นด๋ ์ธ๋ฑ์ค๊ฐ ์ ์ฉ๋๋ ํ๋๋ฅผ ์ ํํ ํ๋๋ง ์ง์ ํฉ๋๋ค.
ํ๋ก์ ์ ์
_id
๋ฅผ ๋ช ์์ ์ผ๋ก ์ ์ธํ๊ณ ์ฟผ๋ฆฌ ํ๋ ๋ง ํฌํจํฉ๋๋ค.์ง์ ๋ ์ฟผ๋ฆฌ ํ๋๋ ์ ๋ ๋ฐฐ์ด์ด ์๋๋๋ค.
employees
collection์ ๋ค์๊ณผ ๊ฐ์ ์์ผ๋์นด๋ ์ธ๋ฑ์ค๊ฐ ์๋ค๊ณ ๊ฐ์ ํด ๋ด
์๋ค.
db.employees.createIndex( { "$**" : 1 } )
๋ค์ ์์
์ ๋จ์ผ ํ๋ lastName
์ ๋ํด ์ฟผ๋ฆฌํ๊ณ ๊ฒฐ๊ณผ ๋ฌธ์์์ ๋ค๋ฅธ ๋ชจ๋ ํ๋๋ฅผ ํ๋ก์ ํธํฉ๋๋ค.
db.employees.find( { "lastName" : "Doe" }, { "_id" : 0, "lastName" : 1 } )
์ง์ ๋ lastName
๊ฐ ๋ฐฐ์ด์ด ์๋๋ผ๋ ๊ฐ์ ํ์ MongoDB๋ $**
์์ผ๋์นด๋ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ฌ ํด๋น ์ฟผ๋ฆฌ๋ฅผ ์ง์ํ ์ ์์ต๋๋ค.
๋ค์ค ํ๋ ์ฟผ๋ฆฌ ์กฐ๊ฑด์
์์ผ๋์นด๋ ์ธ๋ฑ์ค๋ ์ต๋ ํ๋ ์ ์ฟผ๋ฆฌ ์กฐ๊ฑด์ ํ๋๋ฅผ ์ง์ํ ์ ์์ต๋๋ค. ์ฆ:
MongoDB๋ ์์ผ๋์นด๋๊ฐ ์๋ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ฌ ์ฟผ๋ฆฌ ์กฐ๊ฑด์์ ํ ๋ถ๋ถ์ ์ถฉ์กฑํ๊ณ ์์ผ๋์นด๋ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ฌ ๋ค๋ฅธ ๋ถ๋ถ์ ์ถฉ์กฑํ ์ ์์ต๋๋ค.
MongoDB๋ ํ๋์ ์์ผ๋์นด๋ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ฌ ์ฟผ๋ฆฌ ์ ์ด์ ํ ๋ถ๋ถ์ ์ถฉ์กฑํ๊ณ ๋ค๋ฅธ ์์ผ๋์นด๋ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ฌ ๋ค๋ฅธ ๋ถ๋ถ์ ์ถฉ์กฑํ ์ ์์ต๋๋ค.
๋จ์ผ ์์ผ๋์นด๋ ์ธ๋ฑ์ค๊ฐ ์ฌ๋ฌ ์ฟผ๋ฆฌ ํ๋๋ฅผ ์ง์ํ ์ ์๋๋ผ๋ MongoDB๋ ์์ผ๋์นด๋ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ฌ ์ฟผ๋ฆฌ ํ๋ ์ค ํ๋๋ง ์ง์ํ ์ ์์ต๋๋ค. ๋๋จธ์ง ๋ชจ๋ ํ๋๋ ์ธ๋ฑ์ค ์์ด ํด๊ฒฐ๋ฉ๋๋ค.
๊ทธ๋ฌ๋ MongoDB๋ ์ฟผ๋ฆฌ $or
๋๋ ์ ๊ทธ๋ฆฌ๊ฒ์ด์
$or
์ฐ์ฐ์์ ๊ฐ ๋
๋ฆฝ์ ์ธ ์ธ์๋ฅผ ์ถฉ์กฑํ๊ธฐ ์ํด ๋์ผํ ์์ผ๋์นด๋ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ ๋ ฌ์ ์ฌ์ฉํ ์ฟผ๋ฆฌ
MongoDB๋ ๋ค์ ์ฌํญ์ด ๋ชจ๋ ์ฐธ์ธ ๊ฒฝ์ฐ์๋ง ๋ฅผ ์ถฉ์กฑํ๊ธฐ ์ํด ์์ผ๋์นด๋ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. sort()
์ฟผ๋ฆฌ ํ๋๋๋ ์ฟผ๋ฆฌ ์กฐ๊ฑด์๋ฅผ ์ถฉ์กฑํ๊ธฐ ์ํด ์์ผ๋์นด๋ ์ธ๋ฑ์ค๋ฅผ ์ ํํฉ๋๋ค.
sort()
๋ ์ฟผ๋ฆฌ ์กฐ๊ฑด์ ํ๋ ๋ง ์ง์ ํฉ๋๋ค.์ง์ ๋ ํ๋๋ ๋ฐฐ์ด์ด ์๋๋๋ค.
์์ ์กฐ๊ฑด์ด ์ถฉ์กฑ๋์ง ์์ผ๋ฉด MongoDB๋ ์ ๋ ฌ์ ์์ผ๋์นด๋ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. MongoDB๋ ์ฟผ๋ฆฌ ์กฐ๊ฑด์์ ์ธ๋ฑ์ค์ ๋ค๋ฅธ ์ธ๋ฑ์ค๊ฐ ํ์ํ sort()
์์
์ ์ง์ํ์ง ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ ์ธ๋ฑ์ค ๊ต์ฐจ ๋ฐ ์ ๋ ฌ์ ์ฐธ์กฐํ์ธ์.
products
collection์ ๋ค์๊ณผ ๊ฐ์ ์์ผ๋์นด๋ ์ธ๋ฑ์ค๊ฐ ์๋ค๊ณ ๊ฐ์ ํด ๋ด
์๋ค.
db.products.createIndex( { "product_attributes.$**" : 1 } )
๋ค์ ์์
์ ๋จ์ผ ํ๋ product_attributes.price
๋ฅผ ์ฟผ๋ฆฌํ๊ณ ๋์ผํ ํ๋๋ฅผ ์ ๋ ฌํฉ๋๋ค.
db.products.find( { "product_attributes.price" : { $gt : 10.00 } }, ).sort( { "product_attributes.price" : 1 } )
์ง์ ๋ price
๊ฐ ๋ฐฐ์ด์ด ์๋๋ผ๊ณ ๊ฐ์ ํ๋ฉด MongoDB๋ product_attributes.$**
์์ผ๋์นด๋ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ฌ find()
๋ฐ sort()
์ ๋ชจ๋ ์ถฉ์กฑํ ์ ์์ต๋๋ค.
์ง์๋์ง ์๋ ์ฟผ๋ฆฌ ํจํด
์์ผ๋์นด๋ ์ธ๋ฑ์ค๋ ๋ค์ ์ฟผ๋ฆฌ ํจํด์ ์ง์ํ ์ ์์ต๋๋ค .
ํ๋๊ฐ ์กด์ฌํ์ง ์๋์ง ํ์ธํ๋ ์ฟผ๋ฆฌ
ํ๋๊ฐ ๋ฌธ์ ๋๋ ๋ฐฐ์ด๊ณผ ๊ฐ์์ง ํ์ธํ๋ ์ฟผ๋ฆฌ
ํ๋๊ฐ null๊ณผ ๊ฐ์์ง ํ์ธํ๋ ์ฟผ๋ฆฌ
์์ธํ ๋ด์ฉ์ ์ง์๋์ง ์๋ ์ฟผ๋ฆฌ ๋ฐ ์ ๊ทธ๋ฆฌ๊ฒ์ด์ ํจํด์ ์ฐธ์กฐํ์ธ์.
๋ช ์์ ๋ฐฐ์ด ์ธ๋ฑ์ค๊ฐ ์๋ ์ฟผ๋ฆฌ
MongoDB ์์ผ๋์นด๋ ์ธ๋ฑ์ค๋ ์ธ๋ฑ์ฑ ์ค์ ๋ฐฐ์ด์ ์ง์ ๋ ์์์ ๋ฐฐ์ด ์์น๋ฅผ ๊ธฐ๋กํ์ง ์์ต๋๋ค. ๊ทธ๋ฌ๋ MongoDB๋ ํ๋ ์ด์์ ๋ช
์์ ๋ฐฐ์ด ์ธ๋ฑ์ค(์: parentArray.0.nestedArray.0
)๊ฐ ์๋ ํ๋ ๊ฒฝ๋ก๋ฅผ ํฌํจํ๋ ์ฟผ๋ฆฌ์ ๋ต๋ณํ๊ธฐ ์ํด ์์ผ๋์นด๋ ์ธ๋ฑ์ค๋ฅผ ์ ํํ ์ ์์ต๋๋ค. ์ฐ์๋ ๊ฐ ์ค์ฒฉ ๋ฐฐ์ด์ ๋ํ ์ธ๋ฑ์ค ๊ฒฝ๊ณ๋ฅผ ์ ์ํ๋ ๊ฒ์ด ์ ์ ๋ ๋ณต์กํด์ง๊ธฐ ๋๋ฌธ์ MongoDB๋ ๊ฒฝ๋ก์ 8
๊ฐ ์ด์์ ๋ช
์์ ๋ฐฐ์ด ์ธ๋ฑ์ค๊ฐ ํฌํจ๋์ด ์๋ ๊ฒฝ์ฐ ์ฟผ๋ฆฌ์์ ์ง์ ๋ ํ๋ ๊ฒฝ๋ก์ ์๋ตํ๋ ๋ฐ ์์ผ๋์นด๋ ์ธ๋ฑ์ค๋ฅผ ๊ณ ๋ คํ์ง ์์ต๋๋ค. MongoDB๋ ์ฌ์ ํ ์ฟผ๋ฆฌ์ ๋ค๋ฅธ ํ๋ ๊ฒฝ๋ก์ ์๋ตํ๊ธฐ ์ํด ์์ผ๋์นด๋ ์ธ๋ฑ์ค๋ฅผ ๊ณ ๋ คํ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
{ "parentObject" : { "nestedArray" : [ "elementOne", { "deeplyNestedArray" : [ "elementTwo" ] } ] } }
MongoDB๋ ๋ค์ ์ฟผ๋ฆฌ๋ฅผ ์ถฉ์กฑํ๊ธฐ ์ํด parentObject
๊ฐ ํฌํจ๋ ์์ผ๋์นด๋ ์ธ๋ฑ์ค๋ฅผ ์ ํํ ์ ์์ต๋๋ค.
"parentObject.nestedArray.0" : "elementOne"
"parentObject.nestedArray.1.deeplyNestedArray.0" : "elementTwo"
์ฟผ๋ฆฌ ์กฐ๊ฑด์์ ์ง์ ๋ ํ๋ ๊ฒฝ๋ก๊ฐ 8๊ฐ ์ด์์ ๋ช ์์ ๋ฐฐ์ด ์ธ๋ฑ์ค๋ฅผ ์ง์ ํ๋ ๊ฒฝ์ฐ MongoDB๋ ํด๋น ํ๋ ๊ฒฝ๋ก์ ์๋ตํ ๋ ์์ผ๋์นด๋ ์ธ๋ฑ์ค๋ฅผ ๊ณ ๋ คํ์ง ์์ต๋๋ค. ๋์ MongoDB๋ ์ฟผ๋ฆฌ์ ๋ต๋ณํ๊ธฐ ์ํด ๋ค๋ฅธ ์ ํฉํ ์ธ๋ฑ์ค๋ฅผ ์ ํ ํ๊ฑฐ๋ collection ์ค์บ์ ์ํํฉ๋๋ค.
์์ผ๋์นด๋ ์ธ๋ฑ์ค ์์ฒด๋ ๋ฌธ์๋ฅผ ์ธ๋ฑ์ฑํ๋ ๋์ ๋ฌธ์๋ฅผ ํ์ํ๋ ๊น์ด์ ์ ํ์ด ์์ต๋๋ค. ์ด ์ ํ์ ์ ํํ ๋ฐฐ์ด ์ธ๋ฑ์ค๋ฅผ ๋ช ์์ ์ผ๋ก ์ง์ ํ๋ ์ฟผ๋ฆฌ์๋ง ์ ์ฉ๋ฉ๋๋ค. ๋ช ์์ ์ธ ๋ฐฐ์ด ์ธ๋ฑ์ค ์์ด ๋์ผํ ์ฟผ๋ฆฌ๋ฅผ ์คํํจ์ผ๋ก์จ MongoDB๋ ์์ผ๋์นด๋ ์ธ๋ฑ์ค๋ฅผ ์ ํํ์ฌ ์ฟผ๋ฆฌ์ ๋ต๋ณํ ์ ์์ต๋๋ค.
"parentObject.nestedArray" : "elementOne"
"parentObject.nestedArray.deeplyNestedArray" : "elementTwo"