2013-02-25 61 views
5

मेरे पास कई फ़ील्ड वाले दस्तावेज़ों के मोंगोडीबी संग्रह हैं। कॉलम/फ़ील्ड में से केवल एक संख्यात्मक होना चाहिए, लेकिन इनमें से कुछ फ़ील्ड में गैर-संख्यात्मक (दूषित) डेटा स्ट्रिंग मानों के रूप में होता है। दूषित, गैर-संख्यात्मक डेटा को छोड़कर, मुझे इस कॉलम का उच्चतम संख्यात्मक मान मिलना चाहिए। मुझे Getting the highest value of a column in MongoDB प्रश्न के बारे में पता है, लेकिन AFAIK, यह विस्तारित मामला शामिल नहीं था।mongodb: कॉलम के उच्चतम संख्यात्मक मान को ढूंढना

नीचे दिया गया उदाहरण इस मुद्दे को दर्शाता है। उच्चतम मूल्य के लिए, "age": 70 साथ दस्तावेज़ लौटे किया जाना चाहिए:

[ 
{ 
    "id": "aa001", 
    "age": "90" 
}, 
{ 
    "id": "bb002", 
    "age": 70 
}, 
{ 
    "id": "cc003", 
    "age": 20, 
} 
] 

खोज()/findOne() क्वेरी बहुत मदद मिलेगी के लिए एक PHP उदाहरण प्रदान करना। आपका बहुत बहुत धन्यवाद!

जॉनीएचके सही समाधान के साथ आया। यहाँ काम कर PHP कोड है:

$cursor = $collection->find(array('age' => array('$not' => array('$type' => 2))), array('age' => 1)); 
$cursor->sort(array('age' => -1))->limit(1); 

उत्तर

7

आप डॉक्स जहां age एक स्ट्रिंग है बाहर करने के लिए अपने प्रश्न में $not साथ $type ऑपरेटर का उपयोग कर सकते हैं।

db.test.find({age: {$not: {$type: 2}}}).sort({age: -1}).limit(1) 

या Martti से PHP में: खोल में आपकी क्वेरी कैसा दिखेगा

$cursor = $collection->find(array('age' => array('$not' => array('$type' => 2))), array('age' => 1)); 
$cursor->sort(array('price' => -1))->limit(1); 
+0

लिए काम करता है वाह कि तेज था, धन्यवाद! अच्छी तरह से काम। मैं प्रश्न से संबंधित संबंधित PHP कोड जोड़ दूंगा। – martti

0

आप इस तरह संग्रह से अधिकतम संख्या प्राप्त करने के लिए एकीकृत फ़ंक्शन का उपयोग कर सकते हैं।

$data=$collection->aggregate(array 
        ('$group'=> 
         array('_id'=>'', 
          'age'=>array('$max'=>'$age'.) 
         ) 
        ) 
      ); 
3

पीएचपी ड्राइवर (MongoDB) के साथ
findOne()

$filter=[]; 
$options = ['sort' => ['age' => -1]]; // -1 is for DESC 
$result = $collection->findOne(filter, $options); 
$maxAge = $result['age'] 
0

का उपयोग कर यह मैं

$options = ['limit' => 100,'skip' => 0, 'projection' => ['score' => ['$meta' => 'textScore']], 'sort' => ['score' => ['$meta' => 'textScore']]];