๋ฌธ์„œ ๋ฉ”๋‰ด
๋ฌธ์„œ ํ™ˆ
/
MongoDB ๋งค๋‰ด์–ผ
/ / / /

$rand

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

  • ์ •์˜
  • ๊ตฌ๋ฌธ
  • ์˜ˆ์ œ
  • ์ž์„ธํžˆ ์•Œ์•„๋ณด๊ธฐ
$rand

[0, 1) ๊ฐ„๊ฒฉ์˜ ์˜์‚ฌ ๋‚œ์ˆ˜ ๋ถ€๋™ ์†Œ์ˆ˜์  ์ˆซ์ž๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. 0 ํฌํ•จ, 1 ์ œ์™ธ.

$rand ์˜ ๊ตฌ๋ฌธ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

{ $rand: {} }

์ด ์„น์…˜์˜ ์˜ˆ๋Š” ์ž์„  ๊ธฐ๋ถ€๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ๋‹ค์Œ ์ปฌ๋ ‰์…˜์—๋Š” ๊ธฐ์ฆ์ž ๋ชฉ๋ก์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

db.donors.insertMany(
[
{ donorId: 1000, amount: 0, frequency: 1 },
{ donorId: 1001, amount: 0, frequency: 2 },
{ donorId: 1002, amount: 0, frequency: 1 },
{ donorId: 1003, amount: 0, frequency: 2 },
{ donorId: 1004, amount: 0, frequency: 1 }
]
)

๋‹ค์Œ ์˜ˆ์—์„œ๋Š” donors ์ปฌ๋ ‰์…˜์˜ ๊ฐ ๋ฌธ์„œ๋ฅผ ์ž„์˜์˜ ๊ธฐ๋ถ€ ๊ธˆ์•ก์œผ๋กœ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.

db.donors.updateMany(
{},
[
{ $set:
{ amount:
{ $floor:
{ $multiply: [ { $rand: {} }, 100 ] }
}
}
}
]
)

๋นˆ ์—…๋ฐ์ดํŠธ ํ•„ํ„ฐ๋Š” collection์˜ ๋ชจ๋“  ๋ฌธ์„œ์™€ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค.

๊ฐ ๋ฌธ์„œ์— ๋Œ€ํ•ด $rand ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ 0 ์—์„œ 1 ์‚ฌ์ด์˜ ๊ฐ’์„ ์ƒ์„ฑํ•œ ๋‹ค์Œ $multiply ๋กœ ๊ฐ’์„ ํ™•์žฅํ•ฉ๋‹ˆ๋‹ค.

$floor ์—ฐ์‚ฐ์ž๋Š” ์†Œ์ˆ˜์  ๋ถ€๋ถ„์„ ์ œ๊ฑฐํ•˜๋ฏ€๋กœ ์—…๋ฐ์ดํŠธ๋œ amount๋Š” ์ •์ˆ˜ ๊ฐ’์ž…๋‹ˆ๋‹ค.

collection์„ ์—…๋ฐ์ดํŠธํ•œ ํ›„ ๋ฌธ์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

{ "donorId" : 1000, "amount" : 2, "frequency" : 1 }
{ "donorId" : 1001, "amount" : 58, "frequency" : 2 }
{ "donorId" : 1002, "amount" : 27, "frequency" : 1 }
{ "donorId" : 1003, "amount" : 26, "frequency" : 2 }
{ "donorId" : 1004, "amount" : 42, "frequency" : 1 }

$rand ์—ฐ์‚ฐ์ž๋Š” collection์—์„œ ์ž„์˜์˜ ๋ฌธ์„œ๋ฅผ ์„ ํƒํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์œ ๊ถŒ์ž ๊ธฐ๋ก collection์ด ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค.

db.voters.insertMany(
[
{ name: "Archibald", voterId: 4321, district: 3, registered: true },
{ name: "Beckham", voterId: 4331, district: 3, registered: true },
{ name: "Carolin", voterId: 5321, district: 4, registered: true },
{ name: "Debarge", voterId: 4343, district: 3, registered: false },
{ name: "Eckhard", voterId: 4161, district: 3, registered: false },
{ name: "Faberge", voterId: 4300, district: 1, registered: true },
{ name: "Grimwald", voterId: 4111, district: 3, registered: true },
{ name: "Humphrey", voterId: 2021, district: 3, registered: true },
{ name: "Idelfon", voterId: 1021, district: 4, registered: true },
{ name: "Justo", voterId: 9891, district: 3, registered: false }
]
)

๋‹ค์Œ ์ฟผ๋ฆฌ๋Š” 3 ์„ ๊ฑฐ๊ตฌ ์œ ๊ถŒ์ž ์•ฝ ์ ˆ๋ฐ˜์„ ๋ฌด์ž‘์œ„๋กœ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.

db.voters.find(
{ district: 3,
$expr: { $lt: [0.5, {$rand: {} } ] }
},
{ _id: 0, name: 1, registered: 1 }
)

district ํ•„๋“œ์˜ ์ดˆ๊ธฐ ์ผ์น˜๋Š” ์œ ๊ถŒ์ž๊ฐ€ 3๊ตฌ์—ญ ์ถœ์‹ ์ธ ๋ฌธ์„œ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

$expr ์—ฐ์‚ฐ์ž๋Š” $rand์„ ์‚ฌ์šฉํ•˜์—ฌ find ์—ฐ์‚ฐ์„ ๋”์šฑ ์„ธ๋ถ„ํ™”ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ๋ฌธ์„œ์— ๋Œ€ํ•ด $rand ์€ 0์—์„œ 1 ์‚ฌ์ด์˜ ๊ฐ’์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ž„๊ณ„๊ฐ’์ด 0.5 ์ด๋ผ๋Š” ๊ฒƒ์€ ์ง‘ํ•ฉ์— ์žˆ๋Š” ๋ฌธ์„œ์˜ ์•ฝ ์ ˆ๋ฐ˜์— ๋Œ€ํ•ด ($lt)๋ณด๋‹ค ์ž‘์€ ๋น„๊ต๊ฐ€ ์ฐธ์ž„์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

3 ์„ ๊ฑฐ๊ตฌ์—๋Š” 7๋ช…์˜ ์œ ๊ถŒ์ž๊ฐ€ ์žˆ์œผ๋ฉฐ, ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๊ทธ ์ค‘ ์ ˆ๋ฐ˜ ์ •๋„๊ฐ€ ์„ ํƒ๋ฉ๋‹ˆ๋‹ค.

{ "name" : "Beckham", "registered" : true }
{ "name" : "Eckhard", "registered" : false }
{ "name" : "Grimwald", "registered" : true }
{ "name" : "Humphrey", "registered" : true }

$rand (aggregation)

๋Œ์•„๊ฐ€๊ธฐ

$comment

๋‹ค์Œ

์—ฐ์‚ฐ์ž ์—…๋ฐ์ดํŠธ