मिश्रित प्रकारों को संभालना: केवल संख्यात्मक मानों पर अधिकतम
यदि किसी फील्ड में मिश्रित प्रकार के मान हैं (संख्या और स्ट्रिंग), और आप **केवल संख्यात्मक मानों** में से उच्चतम मान ढूंढना चाहते हैं, तो $not के साथ $type का उपयोग करके गैर-संख्यात्मक मानों को बाहर करें, फिर क्रमबद्ध करें और सीमित करें।
उदाहरण: मिश्रित प्रकारों के साथ डेटा डालना
> db.highestNumericValueOfAColumnDemo.insertOne({"StudentName":"John","StudentMathMarks":69});
{ "acknowledged" : true, "insertedId" : ObjectId("5cba05727219729fde21ddb1") }
> db.highestNumericValueOfAColumnDemo.insertOne({"StudentName":"Carol","StudentMathMarks":"89"}); // स्ट्रिंग
{ "acknowledged" : true, "insertedId" : ObjectId("5cba059d7219729fde21ddb2") }
> db.highestNumericValueOfAColumnDemo.insertOne({"StudentName":"Chris","StudentMathMarks":82});
{ "acknowledged" : true, "insertedId" : ObjectId("5cba059d7219729fde21ddb3") }
> db.highestNumericValueOfAColumnDemo.insertOne({"StudentName":"John","StudentMathMarks":"100"}); // स्ट्रिंग
{ "acknowledged" : true, "insertedId" : ObjectId("5cba059d7219729fde21ddb4") }
दस्तावेज़ देखना
> db.highestNumericValueOfAColumnDemo.find().pretty();
आउटपुट:
क्वेरी: केवल संख्यात्मक (डबल/इंट) मानों पर अधिकतम ढूंढना
> db.highestNumericValueOfAColumnDemo.find({StudentMathMarks: {$not: {$type: 2}}}).sort({StudentMathMarks: -1}).limit(1).pretty();आउटपुट:
व्याख्या:
{$type: 2}BSON टाइप **String** (टाइप नंबर 2) से मेल खाता है।{$not: {$type: 2}}का अर्थ है "स्ट्रिंग **नहीं**" (यानी संख्या, डबल, इंट, आदि)।.sort({StudentMathMarks: -1})अवरोही क्रम में क्रमबद्ध करता है।.limit(1)शीर्ष 1 लेता है।
परिणाम: स्ट्रिंग मान "89" और "100" को अनदेखा कर दिया जाता है। संख्यात्मक मानों में उच्चतम 82 (Chris) है।
बेहतर दृष्टिकोण (MongoDB 3.6+): $type स्ट्रिंग नाम स्वीकार करता है: {$not: {$type: "string"}} अधिक पठनीय है।