Docs Menu
Docs Home
/
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