MongoDB में किसी फील्ड में सरणी के सभी दस्तावेज़ों में विशिष्ट (distinct) मानों की संख्या प्राप्त करने के लिए, distinct() कमांड के बाद .length का उपयोग करें (मोंगो शेल में)।
उदाहरण: नामों की सरणी वाले दस्तावेज़
> db.demo36.insertOne({"Names":["Chris","Bob"]});
{ "acknowledged" : true, "insertedId" : ObjectId("5e17643bcfb11e5c34d898d4") }
> db.demo36.insertOne({"Names":["Mike","Sam","Carol"]});
{ "acknowledged" : true, "insertedId" : ObjectId("5e176449cfb11e5c34d898d5") }
> db.demo36.insertOne({"Names":["Chris","Bob","David"]});
{ "acknowledged" : true, "insertedId" : ObjectId("5e17645bcfb11e5c34d898d6") }
दस्तावेज़ देखना
> db.demo36.find();
आउटपुट: तीन दस्तावेज़ जिनमें ओवरलैपिंग नाम सरणी हैं।
विशिष्ट मानों की गणना
> db.demo36.distinct('Names').length;
आउटपुट: 6
व्याख्या
distinct('Names')संग्रह के सभी दस्तावेज़ों मेंNamesसरणी में मौजूद सभी अद्वितीय मान लौटाता है:["Chris", "Bob", "Mike", "Sam", "Carol", "David"]।.lengthजावास्क्रिप्ट सरणी प्रॉपर्टी है जो गणना देती है (6)।
नोट: सर्वर-साइड गणना के लिए एग्रीगेशन
शेल-ओनली .length के बजाय सर्वर-साइड गणना के लिए, एग्रीगेशन का उपयोग करें:
> db.demo36.aggregate([
{ $unwind: "$Names" },
{ $group: { _id: null, uniqueNames: { $addToSet: "$Names" } } },
{ $project: { count: { $size: "$uniqueNames" }, _id: 0 } }
])
यह { "count" : 6 } लौटाता है और एप्लिकेशन कोड में काम करता है।
चेतावनी
distinct कमांड की 16MB परिणाम लिमिट होती है। बहुत बड़ी विशिष्ट सेट के लिए, एग्रीगेशन पसंद करें।