यदि आपको संग्रह से यादृच्छिक दस्तावेज़ों का एक छोटा सा नमूना वापस करने की आवश्यकता है, तो यहां तीन दृष्टिकोण हैं जिन्हें आप एकत्रीकरण पाइपलाइन का उपयोग करके देख सकते हैं।
द $sample स्टेज
$sample एकत्रीकरण पाइपलाइन चरण विशेष रूप से दस्तावेजों की एक निर्दिष्ट संख्या को यादृच्छिक रूप से चुनने के लिए डिज़ाइन किया गया है।
जब आप $sample . का उपयोग करते हैं , आप उन दस्तावेज़ों की संख्या निर्दिष्ट करते हैं जिन्हें आप size . में लौटाना चाहते हैं फ़ील्ड.
मान लीजिए कि हमारे पास pets नामक निम्नलिखित संग्रह है :
{ "_id" : 1, "name" : "Wag", "type" : "Dog", "weight" : 20 }
{ "_id" : 2, "name" : "Bark", "type" : "Dog", "weight" : 10 }
{ "_id" : 3, "name" : "Meow", "type" : "Cat", "weight" : 7 }
{ "_id" : 4, "name" : "Scratch", "type" : "Cat", "weight" : 8 }
{ "_id" : 5, "name" : "Bruce", "type" : "Bat", "weight" : 3 }
{ "_id" : 6, "name" : "Hop", "type" : "Kangaroo", "weight" : 130 }
{ "_id" : 7, "name" : "Punch", "type" : "Gorilla", "weight" : 300 }
{ "_id" : 8, "name" : "Snap", "type" : "Crocodile", "weight" : 400 }
{ "_id" : 9, "name" : "Flutter", "type" : "Hummingbird", "weight" : 1 }
हम $sample . का उपयोग कर सकते हैं इस तरह उन दस्तावेज़ों का एक यादृच्छिक नमूना लेने के लिए:
db.pets.aggregate(
[
{
$sample: { size: 3 }
}
]
) परिणाम:
{ "_id" : 1, "name" : "Wag", "type" : "Dog", "weight" : 20 }
{ "_id" : 5, "name" : "Bruce", "type" : "Bat", "weight" : 3 }
{ "_id" : 3, "name" : "Meow", "type" : "Cat", "weight" : 7 }
इस मामले में मैंने { size: 3 } . निर्दिष्ट किया है जिसने तीन दस्तावेज लौटा दिए।
यहाँ यह फिर से एक अलग नमूना आकार का उपयोग कर रहा है:
db.pets.aggregate(
[
{
$sample: { size: 5 }
}
]
) परिणाम:
{ "_id" : 6, "name" : "Hop", "type" : "Kangaroo", "weight" : 130 }
{ "_id" : 5, "name" : "Bruce", "type" : "Bat", "weight" : 3 }
{ "_id" : 8, "name" : "Snap", "type" : "Crocodile", "weight" : 400 }
{ "_id" : 7, "name" : "Punch", "type" : "Gorilla", "weight" : 300 }
{ "_id" : 4, "name" : "Scratch", "type" : "Cat", "weight" : 8 }
$sample चरण दो तरीकों में से एक में काम करता है, संग्रह में कितने दस्तावेज़ हैं, संग्रह में दस्तावेज़ों की संख्या के सापेक्ष नमूना आकार, और पाइपलाइन में इसकी स्थिति पर निर्भर करता है। MongoDB देखें $sample यह कैसे काम करता है इसकी व्याख्या के लिए।
यह भी संभव है कि $sample चरण एक ही दस्तावेज़ को उसके परिणाम सेट में एक से अधिक बार लौटा सकता है।
द $rand संचालिका
$rand ऑपरेटर को MongoDB 4.4.2 में पेश किया गया था, और इसका उद्देश्य 0 और 1 के बीच एक यादृच्छिक फ्लोट को हर बार कॉल करने पर वापस करना है।
इसलिए, हम इसका उपयोग $match . में कर सकते हैं अन्य ऑपरेटरों, जैसे $expr . के साथ संयोजन के रूप में चरण और $lt दस्तावेज़ों का एक यादृच्छिक नमूना वापस करने के लिए।
उदाहरण:
db.pets.aggregate(
[
{
$match:
{
$expr:
{
$lt: [ 0.5, { $rand: {} } ]
}
}
}
]
) परिणाम:
{ "_id" : 3, "name" : "Meow", "type" : "Cat", "weight" : 7 }
{ "_id" : 4, "name" : "Scratch", "type" : "Cat", "weight" : 8 }
{ "_id" : 6, "name" : "Hop", "type" : "Kangaroo", "weight" : 130 }
{ "_id" : 9, "name" : "Flutter", "type" : "Hummingbird", "weight" : 1 }
इस दृष्टिकोण से निर्धारित परिणाम $sample . से भिन्न है दृष्टिकोण, जिसमें यह निश्चित संख्या में दस्तावेज़ वापस नहीं करता है। इस दृष्टिकोण से लौटाए गए दस्तावेज़ों की संख्या भिन्न हो सकती है।
उदाहरण के लिए, जब मैं एक ही कोड को कई बार चलाता हूं तो क्या होता है।
परिणाम सेट 2:
{ "_id" : 1, "name" : "Wag", "type" : "Dog", "weight" : 20 }
{ "_id" : 7, "name" : "Punch", "type" : "Gorilla", "weight" : 300 }
{ "_id" : 8, "name" : "Snap", "type" : "Crocodile", "weight" : 400 } परिणाम सेट 3:
{ "_id" : 2, "name" : "Bark", "type" : "Dog", "weight" : 10 }
{ "_id" : 4, "name" : "Scratch", "type" : "Cat", "weight" : 8 }
{ "_id" : 9, "name" : "Flutter", "type" : "Hummingbird", "weight" : 1 } परिणाम सेट 4:
{ "_id" : 1, "name" : "Wag", "type" : "Dog", "weight" : 20 }
{ "_id" : 3, "name" : "Meow", "type" : "Cat", "weight" : 7 }
{ "_id" : 6, "name" : "Hop", "type" : "Kangaroo", "weight" : 130 }
{ "_id" : 8, "name" : "Snap", "type" : "Crocodile", "weight" : 400 } परिणाम सेट 5:
{ "_id" : 1, "name" : "Wag", "type" : "Dog", "weight" : 20 }
{ "_id" : 4, "name" : "Scratch", "type" : "Cat", "weight" : 8 }
{ "_id" : 7, "name" : "Punch", "type" : "Gorilla", "weight" : 300 }
{ "_id" : 8, "name" : "Snap", "type" : "Crocodile", "weight" : 400 }
{ "_id" : 9, "name" : "Flutter", "type" : "Hummingbird", "weight" : 1 } $sampleRate संचालिका
MongoDB 4.4.2 में पेश किया गया, $sampleRate ऑपरेटर पिछले उदाहरण के समान करने का अधिक संक्षिप्त तरीका प्रदान करता है।
जब आप $sampleRate . का उपयोग करते हैं , आप 0 . के बीच फ्लोटिंग पॉइंट नंबर के रूप में नमूना दर प्रदान करते हैं और 1 . चयन प्रक्रिया एक समान यादृच्छिक वितरण का उपयोग करती है, और आपके द्वारा प्रदान की जाने वाली नमूना दर इस संभावना का प्रतिनिधित्व करती है कि किसी दिए गए दस्तावेज़ को पाइपलाइन से गुजरते समय चुना जाएगा।
उदाहरण:
db.pets.aggregate(
[
{
$match: { $sampleRate: 0.5 }
}
]
) परिणाम:
{ "_id" : 1, "name" : "Wag", "type" : "Dog", "weight" : 20 }
{ "_id" : 2, "name" : "Bark", "type" : "Dog", "weight" : 10 }
{ "_id" : 5, "name" : "Bruce", "type" : "Bat", "weight" : 3 }
{ "_id" : 6, "name" : "Hop", "type" : "Kangaroo", "weight" : 130 }
{ "_id" : 7, "name" : "Punch", "type" : "Gorilla", "weight" : 300 }
{ "_id" : 8, "name" : "Snap", "type" : "Crocodile", "weight" : 400 } और इसे फिर से चलाएँ:
{ "_id" : 3, "name" : "Meow", "type" : "Cat", "weight" : 7 }
{ "_id" : 4, "name" : "Scratch", "type" : "Cat", "weight" : 8 }
{ "_id" : 7, "name" : "Punch", "type" : "Gorilla", "weight" : 300 }
{ "_id" : 8, "name" : "Snap", "type" : "Crocodile", "weight" : 400 }
{ "_id" : 9, "name" : "Flutter", "type" : "Hummingbird", "weight" : 1 } और फिर:
{ "_id" : 1, "name" : "Wag", "type" : "Dog", "weight" : 20 }
{ "_id" : 2, "name" : "Bark", "type" : "Dog", "weight" : 10 }
{ "_id" : 3, "name" : "Meow", "type" : "Cat", "weight" : 7 }
{ "_id" : 8, "name" : "Snap", "type" : "Crocodile", "weight" : 400 }