2013-06-22 4 views

उत्तर

14

आप के रूप में जवाब here में उल्लिखित पर सॉर्ट करने के लिए पिछले डाला, _id उपयोग करने के लिए सक्षम होना चाहिए:

db.coll.find().sort({_id:-1}).limit(100); 

यह looks like मानक मोंगो हटाने आपरेशन पर सीमा का उपयोग करें, हालांकि समर्थित नहीं है, तो आप ऐसा 100 दस्तावेजों को हटाने के लिए कुछ इस तरह इस्तेमाल कर सकते हैं:

for(i=0;i<100;i++) { 
    db.coll.findAndModify({query :{}, sort: {"_id" : -1}, remove:true}) 
} 

findAndModify के बारे में अधिक के लिए docs देखें।

+5

इस उत्तर के साथ कुछ समस्याएं हैं। 1) आप मान रहे हैं कि उनके _id मान एकान्त रूप से बढ़ रहे हैं। लेकिन अगर वे 2 हैं) तो आप केवल एक ही हटाए गए कथन को करने के बजाय 100 बार लूप चलाने का सुझाव दे रहे हैं db.coll.remove ({_ id: {$ gte: } –

+1

उत्तर मैंने इंगित किया यह सुझाव देने के लिए कि _id सबसे हालिया आइटम वापस कर देगा: "यदि आप ऑटो निर्मित _id फ़ील्ड का उपयोग करते हैं तो इसमें एक तिथि एम्बेड की गई है ... ताकि आप इसे ऑर्डर करने के लिए उपयोग कर सकें।" क्या यह कुछ परिस्थितियों में सटीक नहीं होगा (उदाहरण के लिए जब डीबी शेड किया जाता है)? भले ही, मैं निश्चित रूप से सहमत हूं कि एकल कॉल अधिक कुशल होगा - धन्यवाद! – bcm360

+2

वे बताते हैं * यदि * आप _id का उपयोग करते हैं - लेकिन यह न भूलें कि लोग अपना स्वयं का प्रदान कर सकते हैं _id मान जिसे अलग-अलग वितरित किया जा सकता है और क्लाइंट पर _id भी उत्पन्न होता है - यदि उनके पास कई क्लाइंट हैं तो उनके कुछ घड़ियां * हो सकती हैं * (!) –

संबंधित मुद्दे