๋ฌธ์„œ ๋ฉ”๋‰ด
๋ฌธ์„œ ํ™ˆ
/ / /
Node.js ๋“œ๋ผ์ด๋ฒ„
/

๋ฐ์ดํ„ฐ ์ •๋ ฌ.

์ด ํŽ˜์ด์ง€์˜ ๋‚ด์šฉ

  • ๊ฐœ์š”
  • ์‚ฌ์šฉ๋ฒ•
  • ๋ฐ์ดํ„ฐ ์ •๋ ฌ ๋งค๊ฐœ๋ณ€์ˆ˜
  • ๋ฐ์ดํ„ฐ ์ •๋ ฌ ์˜ˆ์‹œ
  • ์ปฌ๋ ‰์…˜์— ๊ธฐ๋ณธ๊ฐ’ ๋ฐ์ดํ„ฐ ์ •๋ ฌ์„ ์„ค์ •ํ•˜๋‹ค
  • ์ธ๋ฑ์Šค์— ๋ฐ์ดํ„ฐ ์ •๋ ฌ์„ ํ• ๋‹นํ•˜๋‹ค
  • ๋ฐ์ดํ„ฐ ์ •๋ ฌ ์ฟผ๋ฆฌ ์˜ˆ์‹œ

๋ฐ์ดํ„ฐ ์ •๋ ฌ์€ MongoDB 3.4 ์ด์ƒ์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๋ณธ ๊ฐ€์ด๋“œ์—์„œ๋Š” ์ •๋ ฌ ๊ทœ์น™ ์ง‘ํ•ฉ์ธ ๋ฐ์–ดํ„ฐ ์ •๋ ฌ์„ ์‚ฌ์šฉํ•˜์—ฌ ํŠน์ • ์–ธ์–ด ๋ฐ ๊ตญ๊ฐ€ ๋ฐ ์–ธ์–ด ์„ค์ •(๊ณตํ†ต ์–ธ์–ด ๊ด€์šฉ๊ตฌ๋ฅผ ๊ณต์œ ํ•˜๋Š” ์ปค๋ฎค๋‹ˆํ‹ฐ ๋˜๋Š” ์ง€์—ญ)์— ๋Œ€ํ•ด ๋ฌธ์ž์—ด ์ˆœ์„œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž‘์—…์„ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

MongoDB๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ฐ์ดํ„ฐ ์ •๋ ฌ ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์ž์—ด์„ ์ •๋ ฌํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฐ์ดํ„ฐ ์ •๋ ฌ ๋ฉ”์„œ๋“œ๋Š” ASCII ํ‘œ์ค€ ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋ฌธ์ž์—ด์„ ๋น„๊ตํ•˜๊ณ  ์ •๋ ฌํ•˜๋Š” ๋ฌธ์ž ๊ฐ’. ์–ธ์–ด ๋ฐ ๊ตญ๊ฐ€ ๋ฐ ์–ธ์–ด ์„ค์ •์—๋Š” ASCII ํ‘œ์ค€๊ณผ ๋‹ค๋ฅธ ํŠน์ • ๋ฌธ์ž ์ˆœ์„œ ๊ทœ์น™์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ์บ๋‚˜๋‹ค ํ”„๋ž‘์Šค์–ด์—์„œ๋Š” ๊ธฐํƒ€ ๋ฌธ์ž๊ฐ€ ๋™์ผํ•œ ๊ฒฝ์šฐ ๋งจ ์šฐ์ธก ์•…์„ผํŠธ ๋ฌธ์ž์— ๋”ฐ๋ผ ๋ฌธ์ž์—ด ์ˆœ์„œ๊ฐ€ ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ”„๋ž‘์Šค์–ด ๋‹จ์–ด๋ฅผ ์ƒ๊ฐํ•ด ๋ด…๋‹ˆ๋‹ค, ์ฆ‰ ์ฝ”ํŠธ, ์ฝ”ํ…Œ, ์ฝ”ํŠธ, ์ฝ”ํ…Œ.

MongoDB๋Š” ๊ธฐ๋ณธ๊ฐ’ ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ฐ์ดํ„ฐ ์ •๋ ฌ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ˆœ์„œ๋กœ ์ •๋ ฌํ•ฉ๋‹ˆ๋‹ค.

cote
cotรฉ
cรดte
cรดtรฉ

MongoDB๋Š” ์บ๋‚˜๋‹ค ํ”„๋ž‘์Šค์–ด ๋ฐ์ดํ„ฐ ์ •๋ ฌ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ˆœ์„œ๋กœ ์ •๋ ฌํ•ฉ๋‹ˆ๋‹ค.

cote
cรดte
cotรฉ
cรดtรฉ

์ƒˆ ์ปฌ๋ ‰์…˜์ด๋‚˜ ์ƒˆ ์ธ๋ฑ์Šค๋ฅผ ๋งŒ๋“ค ๋•Œ ๋ฐ์ดํ„ฐ ์ •๋ ฌ์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. CRUD ์ž‘์—… ๋ฐ ์• ๊ทธ๋ฆฌ๊ฒŒ์ด์…˜์— ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ ์ •๋ ฌ์„ ์ง€์ •ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ ์ •๋ ฌ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ƒˆ ์ปฌ๋ ‰์…˜์„ ์ƒ์„ฑํ•˜๋Š” ๊ฒฝ์šฐ ํ•ด๋‹น ์ปฌ๋ ‰์…˜์—์„œ ํ˜ธ์ถœ๋˜๋Š” ๋ฐ์ดํ„ฐ ์ •๋ ฌ์„ ์ง€์›ํ•˜๋Š” ๋ชจ๋“  ์ž‘์—…์— ๋Œ€ํ•œ ๊ธฐ๋ณธ๊ฐ’ ๋ฐ์ดํ„ฐ ์ •๋ ฌ์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ ์ •๋ ฌ์„ ์ง€์ •ํ•˜์—ฌ ์ž‘์—…์˜ ๋ฐ์ดํ„ฐ ์ •๋ ฌ์„ ์žฌ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฐธ๊ณ 

ํ˜„์žฌ๋Š” ๊ธฐ์กด ์ปฌ๋ ‰์…˜์— ๋ฐ์ดํ„ฐ ์ •๋ ฌ์„ ์ƒ์„ฑํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ธฐ์กด ์ปฌ๋ ‰์…˜์—์„œ ๋ฐ์ดํ„ฐ ์ •๋ ฌ์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋ฐ์ดํ„ฐ ์ •๋ ฌ์ด ์žˆ๋Š” ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ํ•ด๋‹น ์ธ๋ฑ์Šค์— ๋Œ€ํ•œ ์ž‘์—…์—์„œ ๋™์ผํ•œ ๋ฐ์ดํ„ฐ ์ •๋ ฌ์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ ์ •๋ ฌ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒฝ์šฐ ํ•ด๋‹น ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ž‘์—…์— ๋Œ€ํ•œ ์ •๋ ฌ ์ˆœ์„œ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ์ธ๋ฑ์Šค์—์„œ ๋ฐ์ดํ„ฐ ์ •๋ ฌ์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์ž‘์—…์— ์ผ์น˜ํ•˜๋Š” ๋ฐ์ดํ„ฐ ์ •๋ ฌ์„ ์ œ๊ณตํ•˜๊ณ  ์ž‘์—…์€ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ธ๋ฑ์Šค ์œ ํ˜•์€ ๋Œ€๋ถ€๋ถ„ ๋ฐ์ดํ„ฐ ์ •๋ ฌ์„ ์ง€์›ํ•˜์ง€๋งŒ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์œ ํ˜•์€ ๋ฐ”์ด๋„ˆ๋ฆฌ ๋น„๊ต๋งŒ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ ์ •๋ ฌ ๊ฐ์ฒด์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋งค๊ฐœ ๋ณ€์ˆ˜ ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

collation: {
locale: <string>,
caseLevel: <bool>,
caseFirst: <string>,
strength: <int>,
numericOrdering: <bool>,
alternate: <string>,
maxVariable: <string>,
backwards: <bool>
}

๋ฐ์ดํ„ฐ ์ •๋ ฌ์—์„œ locale ํ•„๋“œ๋ฅผ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋ชจ๋“  ํ•„๋“œ๋Š” ์„ ํƒ ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค. ์ง€์›๋˜๋Š” ๊ตญ๊ฐ€ ๋ฐ ์–ธ์–ด ์„ค์ •์˜ ์ „์ฒด ๋ชฉ๋ก๊ณผ locale ํ•„๋“œ์˜ ๊ธฐ๋ณธ๊ฐ’์€ ์ง€์›๋˜๋Š” ์–ธ์–ด ๋ฐ ๊ตญ๊ฐ€ ๋ฐ ์–ธ์–ด ์„ค์ •์„ ์ฐธ์กฐํ•˜์„ธ์š”. ๊ฐ ํ•„๋“œ์— ๋Œ€ํ•œ ์„ค๋ช…์€ ๋ฐ์ดํ„ฐ ์ •๋ ฌ ๋ฌธ์„œ MongoDB ์ˆ˜๋™ ํ•ญ๋ชฉ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

๋‹ค์Œ ์˜ˆ์‹œ์—์„œ๋Š” souvenirs๋ผ๋Š” ์ƒˆ ์ปฌ๋ ‰์…˜์„ ๋งŒ๋“ค๊ณ  "fr_CA" ๊ตญ๊ฐ€ ๋ฐ ์–ธ์–ด ์„ค์ •์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ ์ •๋ ฌ์„ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ ์ •๋ ฌ์€ ํ•ด๋‹น ์ปฌ๋ ‰์…˜์—์„œ ์ˆ˜ํ–‰๋˜๋Š” ๋ฐ์ดํ„ฐ ์ •๋ ฌ์„ ์ง€์›ํ•˜๋Š” ์ž‘์—…์— ๋ชจ๋‘ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

db.createCollection("souvenirs", {
collation: { locale: "fr_CA" },
});

๋ฐ์ดํ„ฐ ์ •๋ ฌ์„ ์ง€์›ํ•˜๋Š” ์ž‘์—…์€ ๋ชจ๋‘ ์ปฌ๋ ‰์…˜์—์„œ ์ •์˜๋œ ๋ฐ์ดํ„ฐ ์ •๋ ฌ์„ ์ž๋™์œผ๋กœ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ์ฟผ๋ฆฌ๋Š” souvenirs ์ปฌ๋ ‰์…˜์„ ๊ฒ€์ƒ‰ํ•˜๊ณ  "fr_CA" ๊ตญ๊ฐ€ ๋ฐ ์–ธ์–ด ์„ค์ • ๋ฐ์ดํ„ฐ ์ •๋ ฌ์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.

myColl.find({type: "photograph"});

๋ฐ์ดํ„ฐ ์ •๋ ฌ์„ ์ง€์›ํ•˜๋Š” ์ž‘์—…์—์„œ ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ ์ •๋ ฌ์„ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ์ฟผ๋ฆฌ๋Š” "upper" ๊ฐ’์„ ์‚ฌ์šฉํ•˜์—ฌ "is" ์•„์ด์Šฌ๋ž€๋“œ ๊ตญ๊ฐ€ ๋ฐ ์–ธ์–ด ์„ค์ •๊ณผ caseFirst ์„ ํƒ์  ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

myColl.find({type: "photograph"},
{ collation: { locale: "is", caseFirst: "upper" } }
);

๋‹ค์Œ ์˜ˆ์‹œ์—์„œ๋Š” ๋ฐ์ดํ„ฐ ์ •๋ ฌ์ด '"en_US"' ๊ตญ๊ฐ€ ๋ฐ ์–ธ์–ด ์„ค์ •์œผ๋กœ ์„ค์ •๋œ ์ปฌ๋ ‰์…˜์˜ title ํ•„๋“œ์— ์ƒˆ ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

myColl.createIndex(
{ 'title' : 1 },
{ 'collation' : { 'locale' : 'en_US' } });

๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฟผ๋ฆฌ๋Š” ์ €ํฌ๊ฐ€ ์ƒ์„ฑํ•œ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

myColl.find({"year": 1980}, {"collation" : {"locale" : "en_US" }})
.sort({"title": -1});

๋‹ค์Œ๊ณผ ์ฟผ๋ฆฌ๋Š” ์ €ํฌ๊ฐ€ ์ƒ์„ฑํ•œ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ์ฟผ๋ฆฌ์—๋Š” ๋ฐ์ดํ„ฐ ์ •๋ ฌ์ด ์—†๊ณ  ๋‘ ๋ฒˆ์งธ ์ฟผ๋ฆฌ์—๋Š” ์ธ๋ฑ์Šค์˜ ๋ฐ์ดํ„ฐ ์ •๋ ฌ๊ณผ ๋‹ค๋ฅธ ๊ฐ•๋„ ๊ฐ’ ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

myColl.find({"year": 1980}, {"collation" : {"locale" : "en_US", "strength": 2 }})
.sort({"title": -1});
myColl.find({"year": 1980})
.sort({"title": -1});

์ปฌ๋ ‰์…˜์—์„œ ๋ฌธ์„œ๋ฅผ ์ฝ๊ณ , ์—…๋ฐ์ดํŠธํ•˜๊ณ , ์‚ญ์ œํ•˜๋Š” ์ž‘์—…์—๋Š” ๋ฐ์ดํ„ฐ ์ •๋ ฌ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์„น์…˜์—๋Š” ์ด๋Ÿฌํ•œ ์„ ํƒ์˜ ์˜ˆ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ ์ •๋ ฌ์„ ์ง€์›ํ•˜๋Š” ์ „์ฒด ์ž‘์—… ๋ชฉ๋ก์€ MongoDB ๋งค๋‰ด์–ผ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

๋‹ค์Œ ์˜ˆ์‹œ์—์„œ๋Š” ๊ธฐ๋ณธ๊ฐ’ ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ฐ์ดํ„ฐ ์ •๋ ฌ์„ ์‚ฌ์šฉํ•˜๋Š” ์ปฌ๋ ‰์…˜์—์„œ find() ๋ฐ sort() ๋ชจ๋‘๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. locale ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ฐ’์„ "de" ๋กœ(์œผ๋กœ) ์„ค์ •ํ•˜์—ฌ ๋…์ผ์–ด ๋ฐ์ดํ„ฐ ์ •๋ ฌ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

myColl.find({ city: "New York" }, { collation: { locale: "de" } })
.sort({ name: 1 });

๋‹ค์Œ ์˜ˆ์‹œ์—์„œ๋Š” ๊ธฐ๋ณธ๊ฐ’ ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ฐ์ดํ„ฐ ์ •๋ ฌ์„ ์‚ฌ์šฉํ•˜๋Š” ์ปฌ๋ ‰์…˜์—์„œ findOneAndUpdate() ์ž‘์—…์„ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ์ปฌ๋ ‰์…˜์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฌธ์„œ ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

{ "_id" : 1, "first_name" : "Hans" }
{ "_id" : 2, "first_name" : "Gunter" }
{ "_id" : 3, "first_name" : "Gรผnter" }
{ "_id" : 4, "first_name" : "Jรผrgen" }

๋ฐ์ดํ„ฐ ์ •๋ ฌ์„ ์ง€์ • ํ•˜์ง€ ์•Š๋Š” ์ด ์ปฌ๋ ‰์…˜์—์„œ ๋‹ค์Œ findOneAndUpdate() ์ž‘์—…์„ ๊ฐ์•ˆํ•ฉ๋‹ˆ๋‹ค.

myColl.findOneAndUpdate(
{ first_name : { $lt: "Gunter" } },
{ $set: { verified: true } }
);

" Gunter " ๋Š” ๋ฐ์ดํ„ฐ ์ •๋ ฌ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๊ฐ€์žฅ ๋จผ์ € ์ •๋ ฌ๋œ ๊ฒฐ๊ณผ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ฟผ๋ฆฌ ๋ฌธ์„œ์˜ $lt ๋น„๊ต ์—ฐ์‚ฐ์ž ์•ž์— ์–ดํœ˜์ ์œผ๋กœ ์ผ์น˜ํ•˜๋Š” ๋ฌธ์„œ๋Š” ์—†์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด ์ž‘์—…์€ ์–ด๋–ค ๋ฌธ์„œ๋„ ์—…๋ฐ์ดํŠธํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ตญ๊ฐ€ ๋ฐ ์–ธ์–ด ์„ค์ •์ด de@collation=phonebook์œผ๋กœ ์„ค์ •๋œ ๋ฐ์ดํ„ฐ ์ •๋ ฌ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋™์ผํ•œ ์—ฐ์‚ฐ์„ ๊ฐ์•ˆํ•ฉ๋‹ˆ๋‹ค. ์ด์™€ ๊ฐ™์€ ๊ตญ๊ฐ€ ๋ฐ ์–ธ์–ด ์„ค์ •์€ ์ฒซ ๊ธ€์ž๋ฅผ ๋Œ€๋ฌธ์ž๋กœ ํ‘œ์‹œํ•˜๋Š” ๊ณ ์œ  ๋ช…์‚ฌ์˜ ์šฐ์„  ์ˆœ์œ„ ์ง€์ • ๊ทœ์น™ ๋“ฑ์ด ์žˆ๋Š” collation=phonebook ์˜ต์…˜์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. de@collation=phonebook ๊ตญ๊ฐ€ ๋ฐ ์–ธ์–ด ์„ค์ • ๋ฐ ์˜ต์…˜์€ ์›€๋ผ์šฐํŠธ๊ฐ€ ์žˆ๋Š” ๋ฌธ์ž๋ฅผ ์›€๋ผ์šฐํŠธ๊ฐ€ ์—†๋Š” ๋™์ผํ•œ ๋ฌธ์ž๋ณด๋‹ค ๋จผ์ € ์ •๋ ฌํ•ฉ๋‹ˆ๋‹ค.

myColl.findOneAndUpdate(
{ first_name: { $lt: "Gunter" } },
{ $set: { verified: true } },
{ collation: { locale: "de@collation=phonebook" } },
);

de@collation=phonebook ์— ์ง€์ •๋œ ๋ฐ์ดํ„ฐ ์ •๋ ฌ์„ ์‚ฌ์šฉํ•˜์—ฌ "Gรผnter" ์–ดํœ˜์ ์œผ๋กœ "Gunter" ์•ž์— findOneAndUpdate() ์˜ค๊ธฐ ๋•Œ๋ฌธ์— ์ด๋Ÿฌํ•œ ์ž‘์—…์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์—…๋ฐ์ดํŠธ๋œ ๋ฌธ์„œ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

{ lastErrorObject: { updatedExisting: true, n: 1 },
value: { _id: 3, first_name: 'Gรผnter' },
ok: 1 }

๋‹ค์Œ ์˜ˆ์‹œ์—์„œ๋Š” ๊ธฐ๋ณธ๊ฐ’ ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ฐ์ดํ„ฐ ์ •๋ ฌ์„ ์‚ฌ์šฉํ•˜๊ณ  ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฌธ์„œ๊ฐ€ ์žˆ๋Š” ์ปฌ๋ ‰์…˜์—์„œ findOneAndDelete() ์ž‘์—…์„ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.

{ "_id" : 1, "a" : "16" }
{ "_id" : 2, "a" : "84" }
{ "_id" : 3, "a" : "179" }

์ด๋Ÿฌํ•œ ์˜ˆ์—์„œ๋Š” ์–ดํœ˜ ์ˆœ์„œ๊ฐ€ ์•„๋‹Œ, ์ˆซ์ž ์ˆœ์„œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ˆซ์ž ๋ฌธ์ž์—ด์„ ์ •๋ ฌํ•˜๊ธฐ ์œ„ํ•ด numericOrdering ๋ฐ์ดํ„ฐ ์ •๋ ฌ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ true ๋กœ ์„ค์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

myColl.findOneAndDelete(
{ a: { $gt: "100" } },
{ collation: { locale: "en", numericOrdering: true } },
);

์ƒ๋‹จ์˜ ์ž‘์—…์„ ์‹คํ–‰ํ•œ ํ›„ ์ปฌ๋ ‰์…˜์— ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฌธ์„œ๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

{ "_id" : 1, "a" : "16" }
{ "_id" : 2, "a" : "84" }

์„ธ ๋ฌธ์„œ์˜ ์›๋ณธ ์ปฌ๋ ‰์…˜์— ๋Œ€ํ•ด ๋ฐ์ดํ„ฐ ์ •๋ ฌ ์—†์ด ๋™์ผํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋ฉด ๋ฌธ์ž์—ด("16", "84", "179")์˜ ์–ดํœ˜ ๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ๋ฌธ์„œ๋ฅผ ์ผ์น˜์‹œํ‚ค๊ณ , ์ฟผ๋ฆฌ ๊ธฐ์ค€๊ณผ ์ผ์น˜ํ•˜๋Š” ์ฒซ ๋ฒˆ์งธ ๋ฌธ์„œ๋ฅผ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.

await myColl.findOneAndDelete({ a: { $gt: "100" } });

๋ชจ๋“  ๋ฌธ์„œ์˜ a ํ•„๋“œ์— ๊ธฐ์ค€๊ณผ ์ผ์น˜ํ•˜๋Š” ์–ดํœ˜ ๊ฐ’( "100" ์˜ ์–ดํœ˜ ๊ฐ’๋ณด๋‹ค ํผ)์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ์ž‘์—…์€ ์ฒซ ๋ฒˆ์งธ ๊ฒฐ๊ณผ๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. ์œ„์˜ ์ž‘์—…์„ ์‹คํ–‰ํ•˜๊ณ  ๋‚˜๋ฉด ์ปฌ๋ ‰์…˜์—๋Š” ๋‹ค์Œ ๋ฌธ์„œ๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

{ "_id" : 2, "a" : "84" }
{ "_id" : 3, "a" : "179" }

์ง‘๊ณ„ ์™€ ํ•จ๊ป˜ ๋ฐ์ดํ„ฐ ์ •๋ ฌ์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ž‘์—…์—์„œ๋Š” ํŒŒ์ดํ”„๋ผ์ธ ๋‹จ๊ณ„ ๋ฐฐ์—ด ๋’ค์— ์˜ต์…˜ ํ•„๋“œ์— ๋ฐ์ดํ„ฐ ์ •๋ ฌ ๋ฌธ์„œ๋ฅผ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ์˜ˆ์—์„œ๋Š” ๊ธฐ๋ณธ๊ฐ’ ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ฐ์ดํ„ฐ ์ •๋ ฌ์„ ์‚ฌ์šฉํ•˜๋Š” ์ปฌ๋ ‰์…˜์˜ ์ง‘๊ณ„ ํŒŒ์ดํ”„๋ผ์ธ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ๊ตญ๊ฐ€ ๋ฐ ์–ธ์–ด ์„ค์ •๊ตญ๊ฐ€ ๋ฐ ์–ธ์–ด ์„ค์ •์ด ์• ๊ทธ๋ฆฌ๊ฒŒ์ด์…˜๋Š” first_name ํ•„๋“œ๋ฅผ ๋ถ„๋ฅ˜ํ•˜๊ณ  ๊ฐ ๊ทธ๋ฃน์˜ ์ด ๊ฒฐ๊ณผ ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•œ ๋‹ค์Œ ๋…์ผ ์ „ํ™” ๋ฒˆํ˜ธ๋ถ€("de@collation=phonebook" ๊ตญ๊ฐ€ ๋ฐ ์–ธ์–ด ์„ค์ •) ์ˆœ์„œ์— ๋”ฐ๋ผ ๊ฒฐ๊ณผ๋ฅผ ์ •๋ ฌํ•ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ 

์• ๊ทธ๋ฆฌ๊ฒŒ์ด์…˜์—์„œ ๋ฐ์ดํ„ฐ ์ •๋ ฌ ํ•˜๋‚˜๋งŒ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

myColl.aggregate(
[
{ $group: { "_id": "$first_name", "nameCount": { "$sum": 1 } } },
{ $sort: { "_id": 1 } },
],
{ collation: { locale: "de@collation=phonebook" } },
);
โ†ย ์ƒ‰์ธ
๋กœ๊น…ย โ†’