db.collection.findOneAndReplace()
๋๋ผ์ด๋ฒ๊ฐ ํฌํจ๋ MongoDB
์ด ํ์ด์ง์์๋ mongosh
๋ฉ์๋๋ฅผ ์ค๋ช
ํฉ๋๋ค. MongoDB ๋๋ผ์ด๋ฒ์์ ํด๋น ๋ฉ์๋๋ฅผ ๋ณด๋ ค๋ฉด ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ํด๋น ํ์ด์ง๋ฅผ ์ฐธ์กฐํ์ธ์.
์ ์
db.collection.findOneAndReplace( filter, replacement, options )
์ง์ ๋ ํํฐ๋ฅผ๊ธฐ๋ฐ์ผ๋ก ๋จ์ผ ๋ฌธ์๋ฅผ ๋์ฒดํฉ๋๋ค.
๊ตฌ๋ฌธ
findOneAndReplace()
๋ฉ์๋์ ํ์์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
db.collection.findOneAndReplace( <filter>, <replacement>, { writeConcern: <document>, projection: <document>, sort: <document>, maxTimeMS: <number>, upsert: <boolean>, returnDocument: <string>, returnNewDocument: <boolean>, collation: <document> } )
ํ๋ ๋ฐ ์ต์
findOneAndReplace()
๋ฉ์๋์๋ ๋ค์ ํ๋์ ์ต์
์ด ์ฌ์ฉ๋ฉ๋๋ค.
ํ๋ | ์ ํ | ์ค๋ช
| ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
๋ฌธ์ | ์
๋ฐ์ดํธ์ ์ ํ ๊ธฐ์ค์
๋๋ค. ๋ฉ์๋์์์ ๋์ผํ ์ฟผ๋ฆฌ ์ ํ๊ธฐ collection์์ ๋ฐํ๋ ์ฒซ ๋ฒ์งธ ๋ฌธ์๋ฅผ ๋ฐ๊พธ๋ ค๋ฉด ๋น ๋ฌธ์ ์ง์ ํ์ง ์์ผ๋ฉด ๋น ๋ฌธ์๋ก ๊ธฐ๋ณธ ์ค์ ๋ฉ๋๋ค. ์ฟผ๋ฆฌ ์ธ์๊ฐ ๋ฌธ์๊ฐ ์๋ ๊ฒฝ์ฐ ์ฐ์ฐ์ ์ค๋ฅ๋ฅผ ๋ฐํํฉ๋๋ค. | |||||||||||
๋ฌธ์ | ๋์ฒด ๋ฌธ์์ ๋๋ค. ์ ๋ฐ์ดํธ ์ฐ์ฐ์๋ฅผ ํฌํจํ ์ ์์ต๋๋ค.
| |||||||||||
writeConcern | ๋ฌธ์ | ์ ํ ์ฌํญ์ ๋๋ค. ์ฐ๊ธฐ ๊ณ ๋ ค๋ฅผ ํํํ๋ ๋ฌธ์์ ๋๋ค. ๊ธฐ๋ณธ ์ฐ๊ธฐ ๊ณ ๋ ค๋ฅผ ์ฌ์ฉํ์ง ์์ผ๋ ค๋ฉด ์๋ตํ์ธ์.
ํธ๋์ญ์ ์์ ์คํ๋๋ ๊ฒฝ์ฐ ์์ ์ ๋ํ ์ฐ๊ธฐ ๊ณ ๋ ค๋ฅผ ๋ช ์์ ์ผ๋ก ์ค์ ํ์ง ๋ง์ธ์. ํธ๋์ญ์ ์ ์ฐ๊ธฐ ๊ณ ๋ ค๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ํธ๋์ญ์ ๋ฐ ์ฐ๊ธฐ ๊ณ ๋ ค๋ฅผ ์ฐธ์กฐํ์ธ์. | ||||||||||
๋ฌธ์ | ์ ํ ์ฌํญ. ๋ฐํํ ํ๋์ ํ์ ์งํฉ์ ๋๋ค. ์ผ์นํ๋ ๋ฌธ์์ ๋ชจ๋ ํ๋๋ฅผ ๋ฐํํ๋ ค๋ฉด ์ด ๋งค๊ฐ ๋ณ์๋ฅผ ์๋ตํ์ธ์. ํ๋ก์ ์ ์ธ์๊ฐ ๋ฌธ์๊ฐ ์๋ ๊ฒฝ์ฐ ์์ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค. | |||||||||||
๋ฌธ์ | ์ ํ ์ฌํญ์ ๋๋ค. ํํฐ์ ์ผ์นํ๋ ๋ฌธ์์ ์ ๋ ฌ ์์๋ฅผ ์ง์ ํฉ๋๋ค. ์ ๋ ฌ ์ธ์๊ฐ ๋ฌธ์๊ฐ ์๋ ๊ฒฝ์ฐ ์์ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค. | |||||||||||
maxTimeMS | ์ซ์ | ์ ํ ์ฌํญ. ์์
์ ์๋ฃํด์ผ ํ๋ ์๊ฐ ์ ํ์ ๋ฐ๋ฆฌ์ด ๋จ์๋ก ์ง์ ํฉ๋๋ค. ์ ํ์ ์ด๊ณผํ๋ฉด ์ค๋ฅ๋ฅผ ๋ฐํํฉ๋๋ค. | ||||||||||
๋ถ์ธ | ์ ํ ์ฌํญ์
๋๋ค.
์
์ํธ๊ฐ ์ฌ๋ฌ ๋ฒ ๋ฐ์ํ์ง ์๋๋ก ํ๋ ค๋ฉด ๊ธฐ๋ณธ๊ฐ์ | |||||||||||
๋ฌธ์์ด | ์ ํ ์ฌํญ.
| |||||||||||
๋ถ์ธ | ์ ํ ์ฌํญ. ๊ธฐ๋ณธ๊ฐ์ | |||||||||||
๋ฌธ์ | ์ ํ ์ฌํญ. ์์ ์ ์ฌ์ฉํ ๋ฐ์ดํฐ ์ ๋ ฌ์ ์ง์ ํฉ๋๋ค. ๋ฐ์ดํฐ ์ ๋ ฌ์ ์ฌ์ฉํ๋ฉด ๋์๋ฌธ์ ๋ฐ ์ ์ผํธ ํ์ ๊ท์น๊ณผ ๊ฐ์ ๋ฌธ์์ด ๋น๊ต์ ๋ํ ์ธ์ด๋ณ ๊ท์น์ ์ง์ ํ ์ ์์ต๋๋ค. ๋ฐ์ดํฐ ์ ๋ ฌ ์ต์ ์ ๊ตฌ๋ฌธ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
๋ฐ์ดํฐ ์ ๋ ฌ์ ์ง์ ํ ๋ ๋ฐ์ดํฐ ์ ๋ ฌ์ด ์ง์ ๋์ง ์์์ง๋ง ์ปฌ๋ ์
์ ๊ธฐ๋ณธ ๋ฐ์ดํฐ ์ ๋ ฌ์ด ์๋ ๊ฒฝ์ฐ( ์ปฌ๋ ์ ๋๋ ์ฐ์ฐ์ ๋ํ ๋ฐ์ดํฐ ์ ๋ ฌ์ด ์ง์ ๋์ง ์์ ๊ฒฝ์ฐ, MongoDB๋ ์ด์ ๋ฒ์ ์์ ๋ฌธ์์ด ๋น๊ต์ ์ฌ์ฉ๋ ๊ฐ๋จํ ์ด์ง ๋น๊ต๋ฅผ ์ฌ์ฉํฉ๋๋ค. ํ ์ฐ์ฐ์ ๋ํด ์ฌ๋ฌ ๋ฐ์ดํฐ ์ ๋ ฌ์ ์ง์ ํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ํ๋๋ณ๋ก ์๋ก ๋ค๋ฅธ ๋ฐ์ดํฐ ์ ๋ ฌ์ ์ง์ ํ ์ ์์ผ๋ฉฐ ์ ๋ ฌ๊ณผ ํจ๊ป ์ฐพ๊ธฐ๋ฅผ ์ํํ๋ ๊ฒฝ์ฐ ์ฐพ๊ธฐ ์ ์ ๋ ฌ์์ ๊ฐ๊ฐ ๋ค๋ฅธ ๋ฐ์ดํฐ ์ ๋ ฌ์ ์ฌ์ฉํ๋ ๊ฒ์ ํ์ฉ๋์ง ์์ต๋๋ค. |
๋ฐํ
๊ธฐ๋ณธ์ ์ผ๋ก ์๋ณธ ๋ฌธ์๋ฅผ ๋ฐํํฉ๋๋ค. returnDocument๊ฐ after
๋ก ์ค์ ๋์ด ์๊ฑฐ๋ returnNewDocument๊ฐ true
๋ก ์ค์ ๋ ๊ฒฝ์ฐ ์
๋ฐ์ดํธ๋ ๋ฌธ์๋ฅผ ๋ฐํํฉ๋๋ค.
ํ๋
๋ฌธ์ ์ผ์น
db.collection.findOneAndReplace()
(์)๋ filter
(๊ณผ)์ ์ผ์นํ๋ ์ปฌ๋ ์
์ ์ฒซ ๋ฒ์งธ ์ผ์น ๋ฌธ์๋ฅผ ๋์ฒดํฉ๋๋ค. sort
ํ๋๋ฅผ ์ฌ์ฉํ์ฌ ์์ ๋๋ ๋ฌธ์์ ์ํฅ์ ์ค ์ ์์ต๋๋ค.
ํ๋ก์ ์
์ค์
์ธ์ด ์ผ๊ด์ฑ
find()
๋ฐ findAndModify()
ํ๋ก์ ์
์ ์ง๊ณ์ $project
๋จ๊ณ์ ์ผ์น์ํค๋ ์์
์ ์ผํ์ผ๋ก,
find()
๋ฐ ํ๋ก์ ์ ์ ์ง๊ณ ํํ์findAndModify()
๋ฐ ๊ตฌ๋ฌธ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.MongoDB๋ ํ๋ก์ ์ ๊ณผ ๊ด๋ จํ์ฌ ์ถ๊ฐ ์ ํ ์ฌํญ์ ์ํํฉ๋๋ค. ์์ธํ ๋ด์ฉ์ ํ๋ก์ ์ ์ ํ ์ฌํญ์ ์ฐธ์กฐํ์ธ์.
projection
ํ๋์๋ ๋ค์ ํ์์ ๋ฌธ์๊ฐ ์ฌ์ฉ๋ฉ๋๋ค:
{ field1: <value>, field2: <value> ... }
ํ๋ก์ ์
| ์ค๋ช
|
---|---|
<field>: <1 or true> | ํ๋ ํฌํจ ์ฌ๋ถ๋ฅผ ์ง์ ํฉ๋๋ค. ํ๋ก์ ์
๊ฐ์ 0์ด ์๋ ์ ์๋ฅผ ์ง์ ํ๋ฉด ์ฐ์ฐ์ ํด๋น ๊ฐ์ true ๋ก ์ทจ๊ธํฉ๋๋ค. |
<field>: <0 or false> | ํ๋ ์ ์ธ ์ฌ๋ถ๋ฅผ ์ง์ ํฉ๋๋ค. |
"<field>.$": <1 or true> | |
<field>: <array projection> | ๋ฐฐ์ด ํ๋ก์ ์
์ฐ์ฐ์( ๋ทฐ์๋ ์ฌ์ฉํ ์ ์์ต๋๋ค. |
<field>: <aggregation expression> | ํ๋ก์ ์ ๋ ํ๋์ ๊ฐ์ ์ง์ ํฉ๋๋ค. ๋ฆฌํฐ๋ด ๋ฐ ์ง๊ณ ๋ณ์ ์ฌ์ฉ์ ํฌํจํ ์ง๊ณ ์ ๋ฐ ๊ตฌ๋ฌธ์ ์ฌ์ฉํ๋ฉด ์ ํ๋๋ฅผ ํ๋ก์ ์ ํ๊ฑฐ๋ ๊ธฐ์กด ํ๋๋ฅผ ์ ๊ฐ์ผ๋ก ํ๋ก์ ์ ํ ์ ์์ต๋๋ค.
|
์๋ฒ ๋๋ ํ๋ ์ง์
๋ด์ฅ๋ ๋ฌธ์์ ํ๋์ ๋ํด์๋ ๋ค์ ๋ ์ค ํ๋๋ฅผ ์ฌ์ฉํ์ฌ ํ๋๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค.
์ ํ๊ธฐ๋ฒ(์์:
"field.nestedfield": <value>
์ค์ฒฉ๋ ์์, ์๋ฅผ ๋ค์ด
{ field: { nestedfield: <value> } }
_id
ํ๋ ํ๋ก์ ์
ํ๋๋ฅผ ํ์ํ์ง ์๊ธฐ ์ํด ํ๋ก์ ์
์์ _id: 0
์ ๋ช
์์ ์ผ๋ก ์ง์ ํ์ง ์๋ ํ _id
ํ๋๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฐํ๋ ๋ฌธ์์ ํฌํจ๋ฉ๋๋ค.
ํฌํจ ๋๋ ์ ์ธ
projection
ํ๋๋ ํฌํจ๊ณผ ์ ์ธ ์ฌ์์ ๋ชจ๋ ํฌํจํ ์ ์์ต๋๋ค. ๋จ, _id
ํ๋๋ ์์ธ์
๋๋ค.
ํ๋๋ฅผ ๋ช ์์ ์ผ๋ก ํฌํจํ๋ ํ๋ก์ ์ ์์
_id
ํ๋๋ ๋ช ์์ ์ผ๋ก ์ ์ธํ ์ ์๋ ์ ์ผํ ํ๋์ ๋๋ค.ํ๋๋ฅผ ๋ช ์์ ์ผ๋ก ์ ์ธํ๋ ํ๋ก์ ์ ์์๋
_id
ํ๋๊ฐ ๋ช ์์ ์ผ๋ก ํฌํจํ ์ ์๋ ์ ์ผํ ํ๋์ด์ง๋ง,_id
ํ๋๋ ๊ธฐ๋ณธ์ ์ผ๋ก ํฌํจ๋ฉ๋๋ค.
ํ๋ก์ ์ ์ ๋ํ ์์ธํ ๋ด์ฉ์ ๋ค์ ์น์ ๋ ๊ฐ์ด ์ฐธ์กฐํ์ธ์.
์ค๋ ์ปฌ๋ ์
์ค๋ฉ๋ ์ปฌ๋ ์
์์ db.collection.findOneAndReplace()
๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ์ฟผ๋ฆฌ ํํฐ ์ ์ค๋ ํค์ ๋ํ ๋๋ฑ ์กฐ๊ฑด์ด๋ฐ๋์ ํฌํจ๋์ด์ผ ํฉ๋๋ค.
์ค๋ฉ๋ ์ปฌ๋ ์
์ ๋ฌธ์์๋ ์ค๋ ํค ํ๋๊ฐ ๋๋ฝ ๋ ์ ์์ต๋๋ค. ์ค๋ ํค๊ฐ ์๋ ๋ฌธ์๋ฅผ ๋์์ผ๋ก ์ง์ ํ๋ ค๋ฉด null
๋๋ฑ์ฑ ๋งค์น๋ฅผ ๋ค๋ฅธ ํํฐ ์กฐ๊ฑด(์์: _id
ํ๋)๊ณผ ํจ๊ป ์ฌ์ฉํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
{ _id: <value>, <shardkeyfield>: null } // _id of the document missing shard key
์ค๋ ํค ์์
์ค๋ ํค ํ๋๊ฐ ๋ณ๊ฒฝํ ์ ์๋ _id
ํ๋๊ฐ ์๋ ๊ฒฝ์ฐ ๋ฌธ์์ ์ค๋ ํค ๊ฐ์ ์
๋ฐ์ดํธํ ์ ์์ต๋๋ค.
๊ฒฝ๊ณ
์ค๋ฉ๋ ์ปฌ๋ ์ ์ ๋ฌธ์์๋ ์ค๋ ํค ํ๋๊ฐ ๋๋ฝ๋ ์ ์์ต๋๋ค. ๋ฌธ์์ ์ค๋ ํค ๊ฐ์ ๋ณ๊ฒฝํ ๋ ์ค์๋ก ์ค๋ ํค๋ฅผ ์ ๊ฑฐํ์ง ์๋๋ก ์ฃผ์ํด์ผ ํฉ๋๋ค.
๊ธฐ์กด ์ค๋ ํค ๊ฐ์ db.collection.findOneAndReplace()
์ผ๋ก ์์ ํ๋ ค๋ฉด ๋ค์์ ์ํํฉ๋๋ค.
๋ฐ๋์
mongos
์์ ์คํํด์ผ ํฉ๋๋ค. ์ค๋์์ ์ง์ ์์ ์ ์คํํ์ง ์์์ผ ํฉ๋๋ค.๋ฐ๋์ ํธ๋์ญ์ ์์ ์คํํ๊ฑฐ๋ ์ฌ์๋ ๊ฐ๋ฅ ์ฐ๊ธฐ๋ก ์คํํด์ผ ํฉ๋๋ค .
์ ์ฒด ์ค๋ ํค์ ๋๋ฑ์ฑ ํํฐ๋ฅผ ํฌํจ์์ผ์ผ ํฉ๋๋ค.
๋๋ฝ๋ ์ค๋ ํค
์ค๋ฉ๋ ์ปฌ๋ ์
์ ๋ฌธ์์๋ ์ค๋ ํค ํ๋๊ฐ ๋๋ฝ ๋ ์ ์์ต๋๋ค. db.collection.findOneAndReplace()
๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌธ์์ ๋๋ฝ๋ ์ค๋ ํค๋ฅผ ์ค์ ํ๋ ค๋ฉด ๋ค์์ ์ํํด์ผ ํฉ๋๋ค.
๋ฐ๋์
mongos
์์ ์คํํด์ผ ํฉ๋๋ค. ์ค๋์์ ์ง์ ์์ ์ ์คํํ์ง ์์์ผ ํฉ๋๋ค.์ ์ค๋ ํค ๊ฐ์ด
null
์ด(๊ฐ) ์๋ ๊ฒฝ์ฐ ํธ๋์ญ์ ๋๋ ์ฌ์๋ ๊ฐ๋ฅ ์ฐ๊ธฐ ์ค ํ๋๋ก ์คํํด์ผ ํฉ๋๋ค.์ ์ฒด ์ค๋ ํค์ ๋๋ฑ์ฑ ํํฐ๋ฅผ ํฌํจ์์ผ์ผ ํฉ๋๋ค.
ํ
๋๋ฝ๋ ํค ๊ฐ์ null ๋๋ฑ์ฑ ๋งค์น์ ์ผ๋ถ๋ก ๋ฐํ๋๋ฏ๋ก null ๊ฐ ํค๊ฐ ์
๋ฐ์ดํธ๋์ง ์๋๋ก ํ๋ ค๋ฉด ์ถ๊ฐ ์ฟผ๋ฆฌ ์กฐ๊ฑด(์: _id
ํ๋)์ ์ ์ ํ ํฌํจํ์ธ์.
๋ค์๋ ์ฐธ์กฐํ์ธ์.
ํธ๋์ญ์
db.collection.findOneAndReplace()
๋ ๋ถ์ฐ ํธ๋์ญ์
๋ด์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ค์
๋๋ถ๋ถ์ ๊ฒฝ์ฐ ๋ถ์ฐ ํธ๋์ญ์ ์ ๋จ์ผ ๋ฌธ์ ์ฐ๊ธฐ์ ๋นํด ๋ ํฐ ์ฑ๋ฅ ๋น์ฉ์ด ๋ฐ์ํ๋ฏ๋ก ๋ถ์ฐ ํธ๋์ญ์ ์ ๊ฐ์ฉ์ฑ์ด ํจ๊ณผ์ ์ธ ์คํค๋ง ์ค๊ณ๋ฅผ ๋์ฒดํ ์๋ ์์ต๋๋ค. ๋๋ถ๋ถ์ ์๋๋ฆฌ์ค์์ ๋น์ ๊ทํ๋ ๋ฐ์ดํฐ ๋ชจ๋ธ (๋ด์ฅ๋ ๋ฌธ์ ๋ฐ ๋ฐฐ์ด) ์ ๊ณ์ํด์ ๋ฐ์ดํฐ ๋ฐ ์ฌ์ฉ ์ฌ๋ก์ ์ต์ ์ผ ๊ฒ์ ๋๋ค. ์ฆ, ๋๋ถ๋ถ์ ์๋๋ฆฌ์ค์์ ๋ฐ์ดํฐ๋ฅผ ์ ์ ํ๊ฒ ๋ชจ๋ธ๋งํ๋ฉด ๋ถ์ฐ ํธ๋์ญ์ ์ ํ์์ฑ์ด ์ต์ํ๋ฉ๋๋ค.
์ถ๊ฐ ํธ๋์ญ์ ์ฌ์ฉ ๊ณ ๋ ค ์ฌํญ(์: ๋ฐํ์ ์ ํ ๋ฐ oplog ํฌ๊ธฐ ์ ํ)์ ํ๋ก๋์ ๊ณ ๋ ค์ฌํญ์ ์ฐธ์กฐํ์ธ์.
ํธ๋์ญ์ ๋ด ์ ์ํธ
ํธ๋์ญ์ ์ด ๊ต์ฐจ ์ค๋ ์ฐ๊ธฐ ํธ๋์ญ์ (write transaction)์ด ์๋ ๊ฒฝ์ฐ ๋ถ์ฐ ํธ๋์ญ์ ๋ด์์ ์ปฌ๋ ์ ๊ณผ ์ธ๋ฑ์ค๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
upsert: true
์ธ db.collection.findOneAndReplace()
๋ ๊ธฐ์กด ์ปฌ๋ ์
์ด๋ ์กด์ฌํ์ง ์๋ ์ปฌ๋ ์
์์ ์คํ๋ ์ ์์ต๋๋ค. ์กด์ฌํ์ง ์๋ ์ปฌ๋ ์
์์ ์คํํ๋ฉด ์์
์ด ์ปฌ๋ ์
์ ๋ง๋ญ๋๋ค.
์ฐ๊ธฐ ๊ณ ๋ ค ๋ฐ ํธ๋์ญ์
ํธ๋์ญ์ ์์ ์คํ๋๋ ๊ฒฝ์ฐ ์์ ์ ๋ํ ์ฐ๊ธฐ ๊ณ ๋ ค๋ฅผ ๋ช ์์ ์ผ๋ก ์ค์ ํ์ง ๋ง์ธ์. ํธ๋์ญ์ ์ ์ฐ๊ธฐ ๊ณ ๋ ค๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ํธ๋์ญ์ ๋ฐ ์ฐ๊ธฐ ๊ณ ๋ ค๋ฅผ ์ฐธ์กฐํ์ธ์.
oplog ํญ๋ชฉ
db.collection.findOneAndReplace()
์์
์ด ๋ฌธ์๋ฅผ ์ฑ๊ณต์ ์ผ๋ก ๋ฐ๊พธ๋ฉด ์ด ์์
์ oplog(์์
๋ก๊ทธ)์ ํญ๋ชฉ์ ์ถ๊ฐํฉ๋๋ค. ์์
์ด ์คํจํ๊ฑฐ๋ ๋ฐ๊ฟ ๋ฌธ์๋ฅผ ์ฐพ์ง ๋ชปํ๋ฉด ์์
์ oplog์ ํญ๋ชฉ์ ์ถ๊ฐํ์ง ์์ต๋๋ค.
์์
๋ฌธ์ ๋์ฒด
๋ค์ ๋ฌธ์๋ก ์ํ scores
์ปฌ๋ ์
์ ์์ฑํฉ๋๋ค.
db.scores.insertMany([ { "_id" : 1, "team" : "Fearful Mallards", "score" : 25000 }, { "_id" : 2, "team" : "Tactful Mooses", "score" : 23500 }, { "_id" : 3, "team" : "Aquatic Ponies", "score" : 19250 }, { "_id" : 4, "team" : "Cuddly Zebras", "score" : 15235 }, { "_id" : 5, "team" : "Garrulous Bears", "score" : 18000 } ]);
๋ค์ ์์
์ score
์ด 20000
๋ณด๋ค ์์ ๋ฌธ์๋ฅผ ์ฐพ์์ ๋์ฒดํ๋ ์์
์
๋๋ค.
db.scores.findOneAndReplace( { "score" : { $lt : 20000 } }, { "team" : "Observant Badgers", "score" : 20000 } )
์ด ์์ ์ ๋์ฒด๋ ์๋ณธ ๋ฌธ์๋ฅผ ๋ฐํํฉ๋๋ค.
{ "_id" : 3, "team" : "Aquatic Ponies", "score" : 19250 }
returnNewDocument๊ฐ true์ธ ๊ฒฝ์ฐ ์ฐ์ฐ์ ๋์ฒด ๋ฌธ์๋ฅผ ๋์ ๋ฐํํฉ๋๋ค.
์ฌ๋ฌ ๋ฌธ์๊ฐ ํํฐ ๊ธฐ์ค์ ์ถฉ์กฑํ์ง๋ง, db.collection.findOneAndReplace()
๋ ํ๋์ ๋ฌธ์๋ง ๋์ฒดํฉ๋๋ค.
๋ฌธ์ ์ ๋ ฌ ๋ฐ ๋ฐ๊พธ๊ธฐ
๋ค์ ๋ฌธ์๋ก ์ํ scores
์ปฌ๋ ์
์ ์์ฑํฉ๋๋ค.
db.scores.insertMany([ { "_id" : 1, "team" : "Fearful Mallards", "score" : 25000 }, { "_id" : 2, "team" : "Tactful Mooses", "score" : 23500 }, { "_id" : 3, "team" : "Aquatic Ponies", "score" : 19250 }, { "_id" : 4, "team" : "Cuddly Zebras", "score" : 15235 }, { "_id" : 5, "team" : "Garrulous Bears", "score" : 18000 } ]);
๋ค์ ์์์์๋ score
ํ๋์ ์ค๋ฆ์ฐจ์ ์ ๋ ฌ์ ํฌํจํ์ฌ ํํฐ์ ์ผ์นํ๋ ๋ฌธ์ ์ค ์ ์๊ฐ ๊ฐ์ฅ ๋ฎ์ ๋ฌธ์๋ฅผ ๋ฐ๊ฟ๋๋ค.
db.scores.findOneAndReplace( { "score" : { $lt : 20000 } }, { "team" : "Observant Badgers", "score" : 20000 }, { sort: { "score" : 1 } } )
์ด ์์ ์ ๋์ฒด๋ ์๋ณธ ๋ฌธ์๋ฅผ ๋ฐํํฉ๋๋ค.
{ "_id" : 4, "team" : "Cuddly Zebras", "score" : 15235 }
์ด ๋ช ๋ น์ ์ ๋ ฌ๋์ง ์์ ๊ฒฐ๊ณผ๋ ๋ฌธ์ ๋ฐ๊พธ๊ธฐ๋ฅผ ์ฐธ์กฐํ์ธ์.
๋ฐํ ๋ฌธ์์ ํ๋ก์ ํธ ํน์ ํ๋
๋ค์ ๋ฌธ์๋ก ์ํ scores
์ปฌ๋ ์
์ ์์ฑํฉ๋๋ค.
db.scores.insertMany([ { "_id" : 1, "team" : "Fearful Mallards", "score" : 25000 }, { "_id" : 2, "team" : "Tactful Mooses", "score" : 23500 }, { "_id" : 3, "team" : "Aquatic Ponies", "score" : 19250 }, { "_id" : 4, "team" : "Cuddly Zebras", "score" : 15235 }, { "_id" : 5, "team" : "Garrulous Bears", "score" : 18000 } ])
๋ค์ ์์
์์๋ ํ๋ก์ ์
์ ์ฌ์ฉํ์ฌ ๋ฐํ๋ ๋ฌธ์์ team
ํ๋๋ง ํ์ํฉ๋๋ค.
db.scores.findOneAndReplace( { "score" : { $lt : 22250 } }, { "team" : "Therapeutic Hamsters", "score" : 22250 }, { sort : { "score" : 1 }, projection: { "_id" : 0, "team" : 1 } } )
์ด ์์
์ team
ํ๋๋ง ์๋ ์๋ณธ ๋ฌธ์๋ฅผ ๋ฐํํฉ๋๋ค.
{ "team" : "Cuddly Zebras" }
์๊ฐ ์ ํ์ผ๋ก ๋ฌธ์ ๋ฐ๊พธ๊ธฐ
๋ค์ ์์ ์ ์๋ฃ๊น์ง 5ms์ ์๊ฐ ์ ํ์ ์ค์ ํฉ๋๋ค.
try { db.scores.findOneAndReplace( { "score" : { $gt : 25000 } }, { "team" : "Emphatic Rhinos", "score" : 25010 }, { maxTimeMS: 5 } ); } catch(e){ print(e); }
์์ ์ด ์๊ฐ ์ ํ์ ์ด๊ณผํ๋ฉด ์์ ์ ๋ค์์ ๋ฐํํฉ๋๋ค.
Error: findAndModifyFailed failed: { "ok" : 0, "errmsg" : "operation exceeded time limit", "code" : 50 }
๋ฌธ์๋ฅผ ์ ์ํธ๋ก ๋ฐ๊พธ๊ธฐ
๋ค์ ์์ ์์๋ ํํฐ์ ์ผ์นํ๋ ๋ฌธ์๊ฐ ์๋ ๊ฒฝ์ฐ ์ ์ํธ ํ๋๋ฅผ ์ฌ์ฉํ์ฌ ๋์ฒด ๋ฌธ์๋ฅผ ์ฝ์ ํฉ๋๋ค.
try { db.scores.findOneAndReplace( { "team" : "Fortified Lobsters" }, { "_id" : 6019, "team" : "Fortified Lobsters" , "score" : 32000}, { upsert : true, returnDocument: "after" } ); } catch (e){ print(e); }
์ด ์ฐ์ฐ์ ๋ค์์ ๋ฐํํฉ๋๋ค:
{ "_id" : 6019, "team" : "Fortified Lobsters", "score" : 32000 }
returnDocument: "before"
๋ฅผ ์ค์ ํ ๊ฒฝ์ฐ ๋ฐํํ ์๋ณธ ๋ฌธ์๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ด ์์
์ null
์ ๋ฐํํฉ๋๋ค.
๋ฐ์ดํฐ ์ ๋ ฌ ์ง์
๋ฐ์ดํฐ ์ ๋ ฌ์ ์ฌ์ฉํ๋ฉด ๋์๋ฌธ์ ๋ฐ ์ ์ผํธ ํ์ ๊ท์น๊ณผ ๊ฐ์ ๋ฌธ์์ด ๋น๊ต์ ๋ํ ์ธ์ด๋ณ ๊ท์น์ ์ง์ ํ ์ ์์ต๋๋ค.
๋ค์ ๋ฌธ์๋ก ์ํ myColl
์ปฌ๋ ์
์ ์์ฑํฉ๋๋ค.
db.myColl.insertMany([ { _id: 1, category: "cafรฉ", status: "A" }, { _id: 2, category: "cafe", status: "a" }, { _id: 3, category: "cafE", status: "a" } ]);
๋ค์ ์์ ์๋ ๋ฐ์ดํฐ ์ ๋ ฌ ์ต์ ์ด ํฌํจ๋์ด ์์ต๋๋ค.
db.myColl.findOneAndReplace( { category: "cafe", status: "a" }, { category: "cafร", status: "Replaced" }, { collation: { locale: "fr", strength: 1 } } );
์ฐ์ฐ์ ๋ค์ ๋ฌธ์๋ฅผ ๋ฐํํฉ๋๋ค.
{ "_id" : 1, "category" : "cafรฉ", "status" : "A" }