MongoDB में, $rand
एकत्रीकरण पाइपलाइन ऑपरेटर 0 और 1 के बीच एक यादृच्छिक फ्लोट देता है।
दशमलव बिंदु के बाद फ़्लोटिंग पॉइंट मान में 17 अंक तक होते हैं। कोई भी पिछला शून्य हटा दिया जाता है, इसलिए अंकों की संख्या भिन्न हो सकती है।
$rand
ऑपरेटर को MongoDB 4.4.2 में पेश किया गया था।
उदाहरण
मान लीजिए हमारे पास cats
. नामक संग्रह है निम्नलिखित दस्तावेजों के साथ:
{ "_id" : 1, "name" : "Scratch" } { "_id" : 2, "name" : "Meow" } { "_id" : 3, "name" : "Fluffy" }
हम $rand
. का उपयोग कर सकते हैं प्रत्येक बिल्ली के लिए एक यादृच्छिक संख्या उत्पन्न करने के लिए ऑपरेटर:
db.cats.aggregate(
[
{
$project:
{
randomNumber: { $rand: {} }
}
}
]
)
परिणाम:
{ "_id" : 1, "randomNumber" : 0.5593964875463812 } { "_id" : 2, "randomNumber" : 0.04357301703691149 } { "_id" : 3, "randomNumber" : 0.7556877215199272 }
$rand
ऑपरेटर किसी भी तर्क को स्वीकार नहीं करता है - आप बस इसे $rand: {}
. का उपयोग करके कॉल करते हैं ।
साथ ही, $rand
हर बार कॉल करने पर एक नया नंबर जेनरेट करता है। इसलिए, उपरोक्त कोड को कई बार चलाने से प्रत्येक बिल्ली के लिए एक अलग यादृच्छिक संख्या उत्पन्न होगी।
बस इसे प्रदर्शित करने के लिए, मैं इसे फिर से चलाऊंगा और यह रहा नया परिणाम:
{ "_id" : 1, "randomNumber" : 0.19672627212049873 } { "_id" : 2, "randomNumber" : 0.05513133909795318 } { "_id" : 3, "randomNumber" : 0.7509841462815067 }
हम देख सकते हैं कि यादृच्छिक संख्याएं पिछले उदाहरण में उत्पन्न संख्याओं से भिन्न हैं।
1 से बड़ी यादृच्छिक संख्याएं
जैसा कि बताया गया है, $rand
0 और 1 के बीच एक यादृच्छिक फ्लोट देता है। यह ठीक है अगर हमें शून्य प्राप्त करने में कोई आपत्ति नहीं है, इसके बाद 17 यादृच्छिक दशमलव स्थान हैं।
लेकिन क्या होगा अगर हम 1 से बड़ी यादृच्छिक संख्या चाहते हैं?
ऐसे मामलों में, हम $multiply
. का उपयोग कर सकते हैं ऑपरेटर $rand
. के परिणाम को गुणा करने के लिए ।
उदाहरण:
db.cats.aggregate(
[
{
$project:
{
randomNumber: { $multiply: [ { $rand: {} }, 10 ] }
}
}
]
)
परिणाम:
{ "_id" : 1, "randomNumber" : 1.958938543288535 } { "_id" : 2, "randomNumber" : 4.437057321655847 } { "_id" : 3, "randomNumber" : 8.238909118372334 }
यादृच्छिक पूर्णांक
हम भिन्नात्मक भाग को भी समाप्त करना चाह सकते हैं। इस मामले में, हम एक ऑपरेटर का उपयोग कर सकते हैं जैसे $floor
दशमलव भाग को हटाने के लिए, इसलिए एक पूर्णांक छोड़कर।
उदाहरण:
db.cats.aggregate(
[
{
$project:
{
name: 1,
randomNumber: {
$floor: {
$multiply: [ { $rand: {} }, 10 ]
}
}
}
}
]
)
परिणाम:
{ "_id" : 1, "name" : "Scratch", "randomNumber" : 0 } { "_id" : 2, "name" : "Meow", "randomNumber" : 5 } { "_id" : 3, "name" : "Fluffy", "randomNumber" : 7 }
यहाँ यह फिर से है, लेकिन इस बार हम इसे 100 से गुणा करते हैं:
db.cats.aggregate(
[
{
$project:
{
name: 1,
randomNumber: {
$floor: {
$multiply: [ { $rand: {} }, 100 ]
}
}
}
}
]
)
परिणाम:
{ "_id" : 1, "name" : "Scratch", "randomNumber" : 18 } { "_id" : 2, "name" : "Meow", "randomNumber" : 62 } { "_id" : 3, "name" : "Fluffy", "randomNumber" : 92 }
परिणाम सहेजें
जैसा कि बताया गया है, $rand
हर बार बुलाए जाने पर एक नया यादृच्छिक फ्लोट उत्पन्न करता है। यह ठीक है अगर हम हर बार कोड चलाने पर एक नया यादृच्छिक संख्या चाहते हैं, लेकिन क्या होगा यदि हम प्रत्येक दस्तावेज़ में यादृच्छिक संख्या संग्रहीत करना चाहते हैं?
दस्तावेज़ में यादृच्छिक संख्या संग्रहीत करने के लिए, हम $addFields
. का उपयोग कर सकते हैं ऑपरेटर (या इसका उपनाम $set
) दस्तावेज़ में नई फ़ील्ड जोड़ने के लिए।
उदाहरण:
db.cats.aggregate(
[
{ $set: { randomNumber: { $multiply: [ { $rand: {} }, 100 ] } } },
{ $set: { randomNumber: { $floor: "$randomNumber" } } },
{ $merge: "cats" }
]
)
इस उदाहरण में, हम ऑपरेशन को दो $set
. में अलग करते हैं चरण और एक $merge
मंच।
$merge
चरण एक निर्दिष्ट संग्रह के लिए एकत्रीकरण पाइपलाइन के परिणाम लिखता है, और यह पाइपलाइन में अंतिम चरण होना चाहिए।
अब जब हम उस संग्रह से दस्तावेज़ वापस करते हैं (उदाहरण के लिए find()
जैसी विधि का उपयोग करके ), हम देख सकते हैं कि प्रत्येक दस्तावेज़ में यादृच्छिक संख्या वाला नया फ़ील्ड होता है:
db.cats.find()
परिणाम:
{ "_id" : 1, "name" : "Scratch", "randomNumber" : 61 } { "_id" : 2, "name" : "Meow", "randomNumber" : 86 } { "_id" : 3, "name" : "Fluffy", "randomNumber" : 73 }
अब यादृच्छिक संख्या स्थिर है। हम जितनी बार चाहें दस्तावेज़ वापस कर सकते हैं, और यादृच्छिक संख्या वही रहेगी।
आइए चलाएं find()
फिर से:
db.cats.find()
परिणाम:
{ "_id" : 1, "name" : "Scratch", "randomNumber" : 61 } { "_id" : 2, "name" : "Meow", "randomNumber" : 86 } { "_id" : 3, "name" : "Fluffy", "randomNumber" : 73 }
बिल्कुल वही यादृच्छिक संख्या।