์ฐพ๊ธฐ
์ ์
find
์ฟผ๋ฆฌ๋ฅผ ์คํํ๊ณ ํด๋ผ์ด์ธํธ๊ฐ ์ปค์๋ฅผ ์์ฑํ ์ ์๋ ์ฒซ ๋ฒ์งธ ๊ฒฐ๊ณผ ๋ฐฐ์น์ ์ปค์ ID๋ฅผ ๋ฐํํฉ๋๋ค.
ํ
mongosh
์์ ์ด ๋ช ๋ น์db.collection.find()
๋๋db.collection.findOne()
ํฌํผ ๋ฉ์๋๋ฅผ ํตํด์๋ ์คํํ ์ ์์ต๋๋ค.ํฌํผ ๋ฉ์๋๋
mongosh
์ฌ์ฉ์์๊ฒ ํธ๋ฆฌํ์ง๋ง ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ช ๋ น๊ณผ ๋์ผํ ์์ค์ ์ ๋ณด๋ฅผ ๋ฐํํ์ง ๋ชปํ ์ ์์ต๋๋ค. ํธ์๊ฐ ํ์ํ์ง ์๊ฑฐ๋ ์ถ๊ฐ ๋ฆฌํด ํ๋๊ฐ ํ์ํ ๊ฒฝ์ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ช ๋ น์ ์ฌ์ฉํฉ๋๋ค.
ํธํ์ฑ
์ด ๋ช ๋ น์ ๋ค์ ํ๊ฒฝ์์ ํธ์คํ ๋๋ ๋ฐฐํฌ์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
MongoDB Atlas: ํด๋ผ์ฐ๋์์์ MongoDB ๋ฐฐํฌ๋ฅผ ์ํ ์์ ๊ด๋ฆฌํ ์๋น์ค
์ค์
์ด ๋ช ๋ น์ M0, M2 ๋ฐ M5 ํด๋ฌ์คํฐ์์ ์ ํ์ ์ผ๋ก ์ง์ ๋ฉ๋๋ค. ์์ธํ ๋ด์ฉ์ ์ง์๋์ง ์๋ ๋ช ๋ น์ ์ฐธ์กฐํ์ธ์.
MongoDB Enterprise: MongoDB์ ๊ตฌ๋ ๊ธฐ๋ฐ ์์ฒด ๊ด๋ฆฌ ๋ฒ์
MongoDB Community: MongoDB์ ์์ค ์ฌ์ฉ ๊ฐ๋ฅ ๋ฌด๋ฃ ์์ฒด ๊ด๋ฆฌ ๋ฒ์
๊ตฌ๋ฌธ
find
๋ช
๋ น์ ๊ตฌ๋ฌธ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๋ฒ์ 5.0์์ ๋ณ๊ฒฝ๋จ
db.runCommand( { find: <string>, filter: <document>, sort: <document>, projection: <document>, hint: <document or string>, skip: <int>, limit: <int>, batchSize: <int>, singleBatch: <bool>, comment: <any>, maxTimeMS: <int>, readConcern: <document>, max: <document>, min: <document>, returnKey: <bool>, showRecordId: <bool>, tailable: <bool>, oplogReplay: <bool>, noCursorTimeout: <bool>, awaitData: <bool>, allowPartialResults: <bool>, collation: <document>, allowDiskUse : <bool>, let: <document> // Added in MongoDB 5.0 } )
๋ช ๋ น ํ๋
์ด ๋ช ๋ น์๋ ๋ค์๊ณผ ๊ฐ์ ํ๋๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
ํ๋ | ์ ํ | ์ค๋ช
| ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
| ๋ฌธ์์ด | ์ฟผ๋ฆฌํ ์ปฌ๋ ์ ๋๋ ๋ทฐ ์ ์ด๋ฆ์ ๋๋ค. | ||||||||||
| ๋ฌธ์ | ์ ํ ์ฌํญ. ์ฟผ๋ฆฌ ์ ์ด์ ๋๋ค. ์ง์ ํ์ง ์์ผ๋ฉด ์ปฌ๋ ์ ์ ๋ชจ๋ ๋ฌธ์๊ฐ ์ ์ด์ ์ผ์นํฉ๋๋ค. | ||||||||||
๋ฌธ์ | ์ ํ ์ฌํญ. ๊ฒฐ๊ณผ ์์๋ฅผ ์ง์ ํ๋ ์ ๋ ฌ ์ง์ ์ ๋๋ค. | |||||||||||
| ๋ฌธ์ | ์ ํ ์ฌํญ. ๋ฐํ๋ ๋ฌธ์์ ํฌํจํ ํ๋๋ฅผ ๊ฒฐ์ ํ๊ธฐ ์ํ ํ๋ก์ ์ ์ฌ์์ ๋๋ค. ํฌ์ ๋ฐ ํฌ์ ์ฐ์ฐ์๋ฅผ์ฐธ์กฐํ์ธ์. ๋ทฐ์ ๋ํ | ||||||||||
| ๋ฌธ์์ด ๋๋ ๋ฌธ์ | ์ ํ ์ฌํญ. ์ธ๋ฑ์ค ์ฌ์. ์ธ๋ฑ์ค ์ด๋ฆ์ ๋ฌธ์์ด๋ก ์ง์ ํ๊ฑฐ๋ ์ธ๋ฑ์ค ํค ํจํด์ผ๋ก ์ง์ ํฉ๋๋ค. ์ด ์ต์ ์ ์ง์ ํ๋ฉด ์ฟผ๋ฆฌ ์์คํ ์ ํํธ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๋ ๊ณํ๋ง ๊ณ ๋ คํฉ๋๋ค. ๋ค์๊ณผ ๊ฐ์ ์์ธ๋ฅผ ์ ์ธํ๊ณ ๋ช
๋ น์ | ||||||||||
| ์์ ์ ์ | ์ ํ ์ฌํญ. ๊ฑด๋๋ธ ๋ฌธ์ ์์ ๋๋ค. ๊ธฐ๋ณธ๊ฐ์ ์ ๋๋ค. | ||||||||||
| Non-negative integer | ์ ํ ์ฌํญ. ๋ฐํํ ๋ฌธ์์ ์ต๋ ๊ฐ์. ์ง์ ํ์ง ์์ ๊ฒฝ์ฐ ๊ธฐ๋ณธ๊ฐ์ '์ ํ ์์'์ ๋๋ค. ๊ฐ๋ก ์ ํํ๋ฉด ์ ํ์ ์ค์ ํ์ง ์์ ๊ฒ๊ณผ ๋์ผํฉ๋๋ค. | ||||||||||
| non-negative integer | ์ ํ ์ฌํญ. ์ฒซ ๋ฒ์งธ ๋ฐฐ์น์์ ๋ฐํํ ๋ฌธ์ ์์ ๋๋ค. ๊ธฐ๋ณธ๊ฐ์ 101์ ๋๋ค. batchSize๊ฐ ์ด๋ฉด ์ปค์๊ฐ ์ค์ ๋์ง๋ง ์ฒซ ๋ฒ์งธ ๋ฐฐ์น์์๋ ๋ฌธ์๊ฐ ๋ฐํ๋์ง ์์ต๋๋ค. ์ด์ ์ ์ ํ๋กํ ์ฝ ๋ฒ์ ๊ณผ ๋ฌ๋ฆฌ ๋ช
๋ น์ 1 batchSize๊ฐ ์ด๋ฉด | ||||||||||
| ๋ถ์ธ | ์ ํ ์ฌํญ. ์ฒซ ๋ฒ์งธ ์ผ๊ด ์ฒ๋ฆฌ ํ์ ์ปค์๋ฅผ ๋ซ์์ง ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํฉ๋๋ค. ๊ธฐ๋ณธ๊ฐ์ false์ ๋๋ค. | ||||||||||
| any | ์ ํ ์ฌํญ. ์ด ๋ช ๋ น์ ์ฒจ๋ถํ ์ฌ์ฉ์ ์ ๊ณต ์ฝ๋ฉํธ์ ๋๋ค. ์ค์ ๋๋ฉด ์ด ์ค๋ช ์ ๋ค์ ์์น์์ ์ด ๋ช ๋ น์ ๋ ์ฝ๋์ ํจ๊ป ํ์๋ฉ๋๋ค.
๋๊ธ์ ์ ํจํ ๋ชจ๋ BSON types (๋ฌธ์์ด, ์ ์, ๊ฐ์ฒด, ๋ฐฐ์ด ๋ฑ)์ด ๋ ์ ์์ต๋๋ค.
| ||||||||||
| non-negative integer | ์ ํ ์ฌํญ. ์๊ฐ ์ ํ์ ๋ฐ๋ฆฌ์ด ๋จ์๋ก ์ง์ ํฉ๋๋ค. MongoDB๋
| ||||||||||
| ๋ฌธ์ | ์ ํ ์ฌํญ. ์ฝ๊ธฐ ๊ณ ๋ ค๋ฅผ ์ง์ ํฉ๋๋ค.
๊ฐ๋ฅํ ์ฝ๊ธฐ ๊ณ ๋ ค ์์ค์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ฝ๊ธฐ ๊ณ ๋ ค ์์ค์ ๋ํ ์์ธํ ๋ด์ฉ์ ์ฝ๊ธฐ ๊ณ ๋ ค ์์ค์ ์ฐธ์กฐํ์ธ์.
| ||||||||||
| ๋ฌธ์ | ์ ํ ์ฌํญ. ํน์ ์ธ๋ฑ์ค์ ๋ํ ๋ฐฐํ์ ์ํ์ ์
๋๋ค. ์์ธํ ๋ด์ฉ์
| ||||||||||
| ๋ฌธ์ | ์ ํ ์ฌํญ. ํน์ ์ธ๋ฑ์ค์ ๋ํ ํฌ๊ด ํํ์
๋๋ค. ์์ธํ ๋ด์ฉ์
| ||||||||||
| ๋ถ์ธ | ์ ํ ์ฌํญ. true์ธ ๊ฒฝ์ฐ ๊ฒฐ๊ณผ ๋ฌธ์์ ์ธ๋ฑ์ค ํค๋ง ๋ฐํํฉ๋๋ค. ๊ธฐ๋ณธ๊ฐ์ false์
๋๋ค. returnKey ๊ฐ true | ||||||||||
| ๋ถ์ธ | ์ ํ ์ฌํญ. ๊ฐ ๋ฌธ์์ ๋ํ ๋ ์ฝ๋ ์๋ณ์๋ฅผ ๋ฐํํ ์ง ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํฉ๋๋ค. true์ด๋ฉด ๋ฐํ๋ ๋ฌธ์์ $recordId ํ๋๋ฅผ ์ถ๊ฐํฉ๋๋ค. | ||||||||||
| ๋ถ์ธ | ์ ํ ์ฌํญ. ์ ํ๋ ์ปฌ๋ ์ ์ ๋ํด ํ ์ผ ์ปค์(tailable cursor)๋ฅผ ๋ฐํํฉ๋๋ค. | ||||||||||
| ๋ถ์ธ | |||||||||||
| ๋ถ์ธ | ์ ํ ์ฌํญ. 30 ๋ถ์ ๋นํ์ฑ ๊ธฐ๊ฐ ํ์ ์๋ฒ ๋น์ธ์ ์ ํด ์ปค์์ ์๊ฐ ์ด๊ณผ๋ฅผ ๋ฐฉ์งํฉ๋๋ค. ์ธ์ ์ ์ผ๋ถ์ธ ์ปค์์ ๋ํด์๋ ๋ฌด์๋ฉ๋๋ค. ์์ธํ ๋ด์ฉ์ ์ธ์ ์ ํด ์๊ฐ ์ด๊ณผ๋ฅผ ์ฐธ์กฐํ์ธ์. | ||||||||||
๋ถ์ธ | ์ ํ ์ฌํญ. ์ค๋๋ ์ปฌ๋ ์
์ ๋ํ ์ฟผ๋ฆฌ์ ๊ฒฝ์ฐ, ์ฟผ๋ฆฌ๋ ํ๋ ์ด์์ ์ค๋๋ฅผ ์ฌ์ฉํ ์ ์๋ ๊ฒฝ์ฐ ๋ช
๋ น(๋๋ ํ์ ์ฟผ๋ฆฌ๋ ์ค๋ ๋ฅผ ์ฌ์ฉํ | |||||||||||
| ๋ฌธ์ | ์ ํ ์ฌํญ. ์์ ์ ์ฌ์ฉํ ๋ฐ์ดํฐ ์ ๋ ฌ์ ์ง์ ํฉ๋๋ค. ๋ฐ์ดํฐ ์ ๋ ฌ์ ์ฌ์ฉํ๋ฉด ๋์๋ฌธ์ ๋ฐ ์ ์ผํธ ํ์ ๊ท์น๊ณผ ๊ฐ์ ๋ฌธ์์ด ๋น๊ต์ ๋ํ ์ธ์ด๋ณ ๊ท์น์ ์ง์ ํ ์ ์์ต๋๋ค. ๋ฐ์ดํฐ ์ ๋ ฌ ์ต์ ์ ๊ตฌ๋ฌธ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
๋ฐ์ดํฐ ์ ๋ ฌ์ ์ง์ ํ ๋ ๋ฐ์ดํฐ ์ ๋ ฌ์ด ์ง์ ๋์ง ์์์ง๋ง ์ปฌ๋ ์
์ ๊ธฐ๋ณธ ๋ฐ์ดํฐ ์ ๋ ฌ์ด ์๋ ๊ฒฝ์ฐ( ์ปฌ๋ ์ ๋๋ ์ฐ์ฐ์ ๋ํ ๋ฐ์ดํฐ ์ ๋ ฌ์ด ์ง์ ๋์ง ์์ ๊ฒฝ์ฐ, MongoDB๋ ์ด์ ๋ฒ์ ์์ ๋ฌธ์์ด ๋น๊ต์ ์ฌ์ฉ๋ ๊ฐ๋จํ ์ด์ง ๋น๊ต๋ฅผ ์ฌ์ฉํฉ๋๋ค. ํ ์ฐ์ฐ์ ๋ํด ์ฌ๋ฌ ๋ฐ์ดํฐ ์ ๋ ฌ์ ์ง์ ํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ํ๋๋ณ๋ก ์๋ก ๋ค๋ฅธ ๋ฐ์ดํฐ ์ ๋ ฌ์ ์ง์ ํ ์ ์์ผ๋ฉฐ ์ ๋ ฌ๊ณผ ํจ๊ป ์ฐพ๊ธฐ๋ฅผ ์ํํ๋ ๊ฒฝ์ฐ ์ฐพ๊ธฐ ์ ์ ๋ ฌ์์ ๊ฐ๊ฐ ๋ค๋ฅธ ๋ฐ์ดํฐ ์ ๋ ฌ์ ์ฌ์ฉํ๋ ๊ฒ์ ํ์ฉ๋์ง ์์ต๋๋ค. | ||||||||||
๋ถ์ธ | ์ ํ ์ฌํญ. ์ด ์ต์
์ ์ฌ์ฉํ์ฌ ํน์ ์ฟผ๋ฆฌ์ ๋ํ
MongoDB 6.0๋ถํฐ ์์ธํ ๋ด์ฉ์
๋์ฉ๋ ์ฐจ๋จ ์ ๋ ฌ์ ๋ฉ๋ชจ๋ฆฌ ์ ํ์ ๋ํ ์์ธํ ๋ด์ฉ์ ์ ๋ ฌ ๋ฐ ์ธ๋ฑ์ค ์ฌ์ฉ์์ฐธ์กฐํ์ธ์. | |||||||||||
๋ฌธ์ | ์ ํ ์ฌํญ. ๋ณ์ ๋ชฉ๋ก์ด ์๋ ๋ฌธ์๋ฅผ ์ง์ ํฉ๋๋ค. ์ด๋ฅผ ํตํด ์ฟผ๋ฆฌ ํ ์คํธ์์ ๋ณ์๋ฅผ ๋ถ๋ฆฌํ์ฌ ๋ช ๋ น ๊ฐ๋ ์ฑ์ ํฅ์์ํฌ ์ ์์ต๋๋ค. ๋ฌธ์ ๊ตฌ๋ฌธ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
๋ณ์๋ ํํ์์์ ๋ฐํ๋ ๊ฐ์ผ๋ก ์ค์ ๋๋ฉฐ ์ดํ์๋ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. ๋ช
๋ น์์ ๋ณ์ ๊ฐ์ ์ก์ธ์คํ๋ ค๋ฉด ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ ๊ฒฐ๊ณผ๋ฅผ ํํฐ๋งํ๋ ค๋ฉด ๋ฐ ๋ณ์๋ฅผ ์ฌ์ฉํ๋ ์ ์ฒด ์์ ๋ฒ์ 5.0์ ์ถ๊ฐ. |
์ถ๋ ฅ
์ด ๋ช ๋ น์ ์ปค์ ID ๋ฐ ์ฒซ ๋ฒ์งธ ๋ฌธ์ ๋ฐฐ์น๋ฅผ ํฌํจํ์ฌ ์ปค์ ์ ๋ณด๊ฐ ํฌํจ๋ ๋ฌธ์๋ฅผ ๋ฐํํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์ค๋ฉ๋ ์ปฌ๋ ์ ์ ๋ํด ์คํํ๋ฉด ๋ค์ ๋ฌธ์๊ฐ ๋ฐํ๋ฉ๋๋ค.
{ "cursor" : { "firstBatch" : [ { "_id" : ObjectId("5e8e2ca217b5324fa9847435"), "zipcode" : "20001", "x" : 1 }, { "_id" : ObjectId("5e8e2ca517b5324fa9847436"), "zipcode" : "30001", "x" : 1 } ], "partialResultsReturned" : true, "id" : NumberLong("668860441858272439"), "ns" : "test.contacts" }, "ok" : 1, "operationTime" : Timestamp(1586380205, 1), "$clusterTime" : { "clusterTime" : Timestamp(1586380225, 2), "signature" : { "hash" : BinData(0,"aI/jWsUVUSkMw8id+A+AVVTQh9Y="), "keyId" : NumberLong("6813364731999420435") } } }
ํ๋ | ์ค๋ช
|
---|---|
| ์ปค์ ์ค๋ฉ๋ ์ปฌ๋ ์
์ ๋ํ ์์
์ด ์ฟผ๋ฆฌ๋ ์ค๋ ์ฌ์ฉํ ์ ์๊ธฐ ๋๋ฌธ์ ๋ถ๋ถ์ ์ธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ ๊ฒฝ์ฐ ์ฟผ๋ฆฌ๋ ์ค๋๋ฅผ ์ฒ์์๋ |
| ๋ช
๋ น์ ์ฑ๊ณตํ๋์ง( |
์์ ์ธ๊ธํ find
๊ด๋ จ ํ๋ ์ธ์๋ db.runCommand()
์๋ ๋ณต์ ๋ณธ ์ธํธ ๋ฐ ์ค๋ฉ๋ ํด๋ฌ์คํฐ์ ๋ํ ๋ค์ ์ ๋ณด๊ฐ ํฌํจ๋์ด ์์ต๋๋ค.
$clusterTime
operationTime
์์ธํ ๋ด์ฉ์ db.runCommand() ๊ฒฐ๊ณผ๋ฅผ ์ฐธ์กฐํ์ธ์.
ํ๋
$regex
Find ์ฟผ๋ฆฌ๋ ๋ ์ด์ ์๋ชป๋ ์ ๊ท์์ ๋ฌด์ํ์ง ์์ต๋๋ค.
MongoDB 5.1๋ถํฐ ์๋ชป๋ $regex options
์ต์
์ ๋ ์ด์ ๋ฌด์๋์ง ์์ต๋๋ค. ์ด ๋ณ๊ฒฝ์ผ๋ก $regex options
๋ aggregate
๋ช
๋ น ๋ฐ ํฌ์
์ฟผ๋ฆฌ์์
$regex
์ ์ฌ์ฉํ๋ ๊ฒ๊ณผ ๋ ์ผ๊ด์ฑ์ด ์์ต๋๋ค.
์ธ์
์ธ์
๋ด์์ ์์ฑ๋ ์ปค์์ ๊ฒฝ์ฐ ์ธ์
์ธ๋ถ์์ getMore
์(๋ฅผ) ํธ์ถํ ์ ์์ต๋๋ค.
๋ง์ฐฌ๊ฐ์ง๋ก ์ธ์
์ธ๋ถ์์ ๋ง๋ ์ปค์์ ๊ฒฝ์ฐ ์ธ์
๋ด๋ถ์์ getMore
๋ฅผ ํธ์ถํ ์ ์์ต๋๋ค.
์ธ์ ์ ํด ์๊ฐ ์ด๊ณผ
MongoDB ๋๋ผ์ด๋ฒ์ mongosh
๋ ์น์ธ๋์ง ์์ ์ฐ๊ธฐ ์์
์ ์ ์ธํ ๋ชจ๋ ์์
์ ์๋ฒ ์ธ์
๊ณผ ์ฐ๊ฒฐํฉ๋๋ค. ์ธ์
๊ณผ ๋ช
์์ ์ผ๋ก ์ฐ๊ฒฐ๋์ง ์์ ์์
(์: Mongo.startSession()
์ฌ์ฉ)์ ๊ฒฝ์ฐ, MongoDB ๋๋ผ์ด๋ฒ์ mongosh
๋ ์์์ ์ธ์
์ ์์ฑํ๊ณ ์ด๋ฅผ ์์
๊ณผ ์ฐ๊ฒฐํฉ๋๋ค.
์ธ์
์ด 30๋ถ ์ด์ ์ ํด ์ํ์ธ ๊ฒฝ์ฐ, MongoDB ์๋ฒ๋ ํด๋น ์ธ์
์ ๋ง๋ฃ๋ ๊ฒ์ผ๋ก ํ์ํ๊ณ ์ธ์ ๋ ์ง ์ธ์
์ ์ข
๋ฃํ ์ ์์ต๋๋ค. MongoDB ์๋ฒ๊ฐ ์ธ์
์ ์ข
๋ฃํ๋ฉด ์งํ ์ค์ธ ๋ชจ๋ ์์
๊ณผ ํด๋น ์ธ์
๊ณผ ๊ด๋ จ๋ ์ด๋ฆฐ ์ปค์๋ ์ข
๋ฃ๋ฉ๋๋ค. ์ฌ๊ธฐ์๋ noCursorTimeout()
๋๋ 30๋ถ๋ณด๋ค ํฐ maxTimeMS()
๋ก ๊ตฌ์ฑ๋ ์ปค์๊ฐ ํฌํจ๋ฉ๋๋ค.
์ปค์๋ฅผ ๋ฐํํ๋ ์์
์ ๊ฒฝ์ฐ ์ปค์๊ฐ 30๋ถ ์ด์ ์ ํด ์ํ์ผ ์ ์๋ ๊ฒฝ์ฐ ๋ช
์์ ์ธ์
๋ด์์ Mongo.startSession()
์ ์ฌ์ฉํ์ฌ ์์
์ ์คํํ๊ณ refreshSessions
๋ช
๋ น์ ์ฌ์ฉํ์ฌ ์ธ์
์ ์ฃผ๊ธฐ์ ์ผ๋ก ์๋ก ๊ณ ์นฉ๋๋ค. ์์ธํ ๋ด์ฉ์ ์ธ์
์ ํด ์๊ฐ ์ด๊ณผ๋ฅผ ์ฐธ์กฐํ์ธ์.
ํธ๋์ญ์
find
๋ ๋ถ์ฐ ํธ๋์ญ์
๋ด์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
ํธ๋์ญ์ ์ธ๋ถ์์ ์์ฑ๋ ์ปค์์ ๊ฒฝ์ฐ ํธ๋์ญ์ ๋ด๋ถ์์
getMore
์(๋ฅผ) ํธ์ถํ ์ ์์ต๋๋ค.ํธ๋์ญ์ ์์ ์์ฑ๋ ์ปค์์ ๊ฒฝ์ฐ ํธ๋์ญ์ ์ธ๋ถ์์
getMore
๋ฅผ ํธ์ถํ ์ ์์ต๋๋ค.
์ค์
๋๋ถ๋ถ์ ๊ฒฝ์ฐ ๋ถ์ฐ ํธ๋์ญ์ ์ ๋จ์ผ ๋ฌธ์ ์ฐ๊ธฐ์ ๋นํด ๋ ํฐ ์ฑ๋ฅ ๋น์ฉ์ด ๋ฐ์ํ๋ฏ๋ก ๋ถ์ฐ ํธ๋์ญ์ ์ ๊ฐ์ฉ์ฑ์ด ํจ๊ณผ์ ์ธ ์คํค๋ง ์ค๊ณ๋ฅผ ๋์ฒดํ ์๋ ์์ต๋๋ค. ๋๋ถ๋ถ์ ์๋๋ฆฌ์ค์์ ๋น์ ๊ทํ๋ ๋ฐ์ดํฐ ๋ชจ๋ธ (๋ด์ฅ๋ ๋ฌธ์ ๋ฐ ๋ฐฐ์ด) ์ ๊ณ์ํด์ ๋ฐ์ดํฐ ๋ฐ ์ฌ์ฉ ์ฌ๋ก์ ์ต์ ์ผ ๊ฒ์ ๋๋ค. ์ฆ, ๋๋ถ๋ถ์ ์๋๋ฆฌ์ค์์ ๋ฐ์ดํฐ๋ฅผ ์ ์ ํ๊ฒ ๋ชจ๋ธ๋งํ๋ฉด ๋ถ์ฐ ํธ๋์ญ์ ์ ํ์์ฑ์ด ์ต์ํ๋ฉ๋๋ค.
์ถ๊ฐ ํธ๋์ญ์ ์ฌ์ฉ ๊ณ ๋ ค ์ฌํญ(์: ๋ฐํ์ ์ ํ ๋ฐ oplog ํฌ๊ธฐ ์ ํ)์ ํ๋ก๋์ ๊ณ ๋ ค์ฌํญ์ ์ฐธ์กฐํ์ธ์.
ํด๋ผ์ด์ธํธ ์ฐ๊ฒฐ ํด์
MongoDB 4.2๋ถํฐ find
๋ฅผ ๋ฐ๊ธํ ํด๋ผ์ด์ธํธ๊ฐ ์์
์ด ์๋ฃ๋๊ธฐ ์ ์ ์ฐ๊ฒฐ์ ๋๋ ๊ฒฝ์ฐ, MongoDB๋ find
๋ฅผ ์ฌ์ฉํ์ฌ ๋ฅผkillOp
์ ์ข
๋ฃ๋ก ํ์ํฉ๋๋ค.
Stable API
Stable API V1๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๋ค์ find
๋ช
๋ น ํ๋๋ ์ง์๋์ง ์์ต๋๋ค:
awaitData
max
min
noCursorTimeout
oplogReplay
returnKey
showRecordId
tailable
์ธ๋ฑ์ค ํํฐ ๋ฐ ๋ฐ์ดํฐ ์ ๋ ฌ
MongoDB 6.0๋ถํฐ ์ธ๋ฑ์ค ํํฐ๋ ์ด์ ์ ๋ช
๋ น์ planCacheSetFilter
์ฌ์ฉํ์ฌ ์ค์ ํ ๋ฐ์ดํฐ ์ ๋ ฌ์ ์ฌ์ฉํฉ๋๋ค.
MongoDB 8.0 ๋ถํฐ๋ ์ธ๋ฑ์ค ํํฐ ๋ฅผ ์ถ๊ฐํ๋ ๋์ ์ฟผ๋ฆฌ ์ค์ ์ ์ฌ์ฉํฉ๋๋ค. ์ธ๋ฑ์ค ํํฐ๋ MongoDB 8.0 ๋ถํฐ ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ต๋๋ค.
์ฟผ๋ฆฌ ์ค์ ์๋ ์ธ๋ฑ์ค ํํฐ๋ณด๋ค ๋ ๋ง์ ๊ธฐ๋ฅ์ด ์์ต๋๋ค. ๋ํ ์ธ๋ฑ์ค ํํฐ๋ ์๊ตฌ์ ์ด์ง ์์ผ๋ฉฐ ๋ชจ๋ ํด๋ฌ์คํฐ ๋
ธ๋์ ๋ํ ์ธ๋ฑ์ค ํํฐ๋ฅผ ์ฝ๊ฒ ๋ง๋ค ์ ์์ต๋๋ค. ์ฟผ๋ฆฌ ์ค์ ์ ์ถ๊ฐํ๊ณ ์์ ๋ฅผ ํ์ํ๋ ค๋ฉด setQuerySettings
๋ฅผ ์ฐธ์กฐํ์ธ์.
๋ทฐ์์ ์ปค์ ๋์ ์ฐพ๊ธฐ
MongoDB 7.3 ๋ถํฐ singleBatch: true
๋ฐ batchSize: 1
์ต์
์ด ์๋ ๋ทฐ์์ ์ฐพ๊ธฐ ๋ช
๋ น์ ์ฌ์ฉํ ๋ ์ปค์ ๊ฐ ๋ ์ด์ ๋ฐํ๋์ง ์์ต๋๋ค. ์ด์ ๋ฒ์ ์ MongoDB ์์๋ ๋จ์ผ ๋ฐฐ์น ์ต์
์ true
๋ก ์ค์ ํ๋ค ํ ๊ฒฝ์ฐ์๋ ์ด๋ฌํ ์ฐพ๊ธฐ ์ฟผ๋ฆฌ๊ฐ ์ปค์ ๋ฅผ ๋ฐํํ์ต๋๋ค.
์ฟผ๋ฆฌ ์ค์
๋ฒ์ 8.0์ ์ถ๊ฐ ๋์์ต๋๋ค.
์ฟผ๋ฆฌ ์ค์ ์ ์ฌ์ฉํ์ฌ ์ธ๋ฑ์ค ํํธ๋ฅผ ์ค์ ํ๊ณ , ์์ ๊ฑฐ๋ถ ํํฐ ๋ฐ ๊ธฐํ ํ๋๋ฅผ ์ค์ ํ ์ ์์ต๋๋ค. ํด๋น ์ค์ ์ ์ ์ฒด ํด๋ฌ์คํฐ์ ์ฟผ๋ฆฌ ํํ์ ์ ์ฉ๋ฉ๋๋ค. ํด๋ฌ์คํฐ๋ ์ข ๋ฃ ํ์๋ ์ค์ ์ ์ ์งํฉ๋๋ค.
์ฟผ๋ฆฌ ์ตํฐ๋ง์ด์ ๋ ์ฟผ๋ฆฌ ๊ณํ ์ค ์ถ๊ฐ ์ ๋ ฅ์ผ๋ก ์ฟผ๋ฆฌ ์ค์ ์ ์ฌ์ฉํ์ฌ ์ฟผ๋ฆฌ๋ฅผ ์คํํ ๊ณํ์ ์ํฅ์ ๋ฏธ์นฉ๋๋ค. ์ฟผ๋ฆฌ ์ค์ ์ ์ฌ์ฉํ์ฌ ์ฟผ๋ฆฌ ํํ๋ฅผ ์ฐจ๋จํ ์๋ ์์ต๋๋ค.
์ฟผ๋ฆฌ ์ค์ ์ ์ถ๊ฐํ๊ณ ์์๋ฅผ ์ดํด๋ณด๋ ค๋ฉด setQuerySettings
๋ฅผ ์ฐธ์กฐํ์ธ์.
find
, distinct
๋ฐ aggregate
๋ช
๋ น์ ๋ํ ์ฟผ๋ฆฌ ์ค์ ์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
์ฟผ๋ฆฌ ์ค์ ์ ๋ ๋ง์ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ฉฐ ๋ ์ด์ ์ฌ์ฉ๋์ง ์๋ ์ธ๋ฑ์ค ํํฐ๋ณด๋ค ์ ํธ๋ฉ๋๋ค.
์ฟผ๋ฆฌ ์ค์ ์ ์ ๊ฑฐ ํ๋ ค๋ฉด removeQuerySettings
๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ฟผ๋ฆฌ ์ค์ ์ ๊ฐ์ ธ์ค๋ ค๋ฉด ์ง๊ณ ํ์ดํ๋ผ์ธ ์์ $querySettings
๋จ๊ณ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์์
์ ๋ ฌ ๋ฐ ์ ํ ์ง์
๋ค์ ๋ช
๋ น์ find
๋ช
๋ น ํํฐ๋ง์ rating
ํ๋์ cuisine
ํ๋์์ ์คํํฉ๋๋ค. ์ด ๋ช
๋ น์๋ ์ผ์นํ๋ ๋ฌธ์์์ _id
, name
, rating
๋ฐ address
ํ๋์ ํ๋๋ง ๋ฐํํ๋ projection
(์ด)๊ฐ ํฌํจ๋์ด ์์ต๋๋ค.
์ด ๋ช
๋ น์ ๊ฒฐ๊ณผ ์งํฉ์ ๋ฌธ์๋ฅผ name
ํ๋๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌํ๊ณ ๊ฒฐ๊ณผ ์งํฉ์ 5๊ฐ ๋ฌธ์๋ก ์ ํํฉ๋๋ค.
db.runCommand( { find: "restaurants", filter: { rating: { $gte: 9 }, cuisine: "italian" }, projection: { name: 1, rating: 1, address: 1 }, sort: { name: 1 }, limit: 5 } )
๊ธฐ๋ณธ ์ฝ๊ธฐ ๊ณ ๋ ค ์ฌ์ ์
๊ธฐ๋ณธ ์ฝ๊ธฐ ๋ฌธ์ ์์ค์ธ "local"
๋ฅผ ์ฌ์ ์ํ๋ ค๋ฉด readConcern
์ต์
์ ์ฌ์ฉํ์ญ์์ค.
๋ณต์ ๋ณธ ์ธํธ์ ๋ํ ๋ค์ ์์
์ ๋๋ถ๋ถ์ ๋
ธ๋์ ๊ธฐ๋ก๋ ๊ฒ์ผ๋ก ํ์ธ๋ ๋ฐ์ดํฐ์ ๊ฐ์ฅ ์ต๊ทผ ๋ณต์ ๋ณธ์ ์ฝ์ ์ ์๋๋ก "majority"
์ ์ฝ๊ธฐ ๊ณ ๋ ค๋ฅผ ์ง์ ํฉ๋๋ค.
db.runCommand( { find: "restaurants", filter: { rating: { $lt: 5 } }, readConcern: { level: "majority" } } )
์ฝ๊ธฐ ๊ณ ๋ ค ์์ค์ ๊ด๊ณ์์ด ๋ ธ๋์ ์ต์ ๋ฐ์ดํฐ๋ ์์คํ ์ ์๋ ๋ฐ์ดํฐ์ ์ต์ ๋ฒ์ ์ ๋ฐ์ํ์ง ์์ ์ ์์ต๋๋ค.
getMore
๋ช
๋ น์ ์๋ find
๋ช
๋ น์ ์ง์ ๋
readConcern
์์ค์ ์ฌ์ฉํฉ๋๋ค.
cursor.readConcern()
๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ
mongosh
๋ฉ์๋ db.collection.find()
์ readConcern
์ ์ง์ ํ ์ ์์ต๋๋ค.
db.restaurants.find( { rating: { $lt: 5 } } ).readConcern("majority")
์ฌ์ฉ ๊ฐ๋ฅํ ์ฝ๊ธฐ ์ฐ๋ ค์ฌํญ์ ๋ํ ์์ธํ ๋ด์ฉ์ ์ฝ๊ธฐ ์ฐ๋ ค์ฌํญ์์ฐธ์กฐํ์ธ์.
๋ฐ์ดํฐ ์ ๋ ฌ ์ง์
๋ฐ์ดํฐ ์ ๋ ฌ์ ์ฌ์ฉํ๋ฉด ๋์๋ฌธ์ ๋ฐ ์ ์ผํธ ํ์ ๊ท์น๊ณผ ๊ฐ์ ๋ฌธ์์ด ๋น๊ต์ ๋ํ ์ธ์ด๋ณ ๊ท์น์ ์ง์ ํ ์ ์์ต๋๋ค.
๋ค์ ์์
์ ์ง์ ๋ ๋ฐ์ดํฐ ์ ๋ ฌ์ ์ฌ์ฉํ์ฌ find
๋ช
๋ น์ ์คํํฉ๋๋ค:
db.runCommand( { find: "myColl", filter: { category: "cafe", status: "a" }, sort: { category: 1 }, collation: { locale: "fr", strength: 1 } } )
mongosh
๋ db.collection.find()
์์
์ ๋ํ ๋ฐ์ดํฐ ์ ๋ ฌ์ ์ง์ ํ๊ธฐ ์ํด cursor.collation()
์ ์ ๊ณตํฉ๋๋ค.
let
์์ ๋ณ์ ์ฌ์ฉ
๋ฒ์ 5.0์ ์ถ๊ฐ.
๋ช ๋ น์ ๋ค๋ฅธ ๊ณณ์์ ์ก์ธ์คํ ์ ์๋ ๋ณ์๋ฅผ ์ ์ํ๋ ค๋ฉด let ์ต์ ์ ์ฌ์ฉํฉ๋๋ค.
์ฐธ๊ณ
๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ ๊ฒฐ๊ณผ๋ฅผ ํํฐ๋งํ๋ ค๋ฉด $expr
์ฐ์ฐ์ ๋ด์์ ๋ณ์์ ์ก์ธ์คํด์ผ ํฉ๋๋ค.
์ปฌ๋ ์
cakeFlavors
์ ๋ง๋ญ๋๋ค:
db.cakeFlavors.insertMany( [ { _id: 1, flavor: "chocolate" }, { _id: 2, flavor: "strawberry" }, { _id: 3, flavor: "cherry" } ] )
๋ค์ ์์์์๋ let
์ targetFlavor
๋ณ์๋ฅผ ์ ์ํ๊ณ ์ด ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ ์ด์ฝ๋ฆฟ ์ผ์ดํฌ ๋ง์ ๊ฒ์ํฉ๋๋ค.
db.cakeFlavors.runCommand( { find: db.cakeFlavors.getName(), filter: { $expr: { $eq: [ "$flavor", "$$targetFlavor" ] } }, let : { targetFlavor: "chocolate" } } )