2011-12-16 15 views
11

मेरे पास एक त्वरित सवाल है, एक मोंगो संग्रह से ऑब्जेक्ट को पकड़ने और हटाने का तेज़ तरीका क्या है। यहाँ कोड है, मैं वर्तमान है:मोंगोडीबी ढूंढें और हटाएं - सबसे तेज़ तरीका

$cursor = $coll->find()->sort(array('created' => 1))->limit(1); 
$obj = $cursor->getNext(); 
$coll->remove(array('name' => $obj['name'])); 

के रूप में आप देख सकते हैं ऊपर यह डेटाबेस से एक दस्तावेज़ पकड़ लेता है और इसे हटा देता है (इसलिए यह फिर से संसाधित नहीं है)। हालांकि यह तेजी से हो सकता है, मुझे इसे तेज करने की आवश्यकता है। चुनौती यह है कि हमारे पास यह करने के लिए कई प्रक्रियाएं हैं और जो उन्होंने पाया है उसे संसाधित करते हैं लेकिन कभी-कभी दो या अधिक प्रक्रियाएं उसी दस्तावेज़ को पकड़ती हैं जिससे डुप्लिकेट बनाते हैं। असल में मुझे इसे बनाने की ज़रूरत है ताकि एक दस्तावेज़ केवल एक बार पकड़ लिया जा सके। तो किसी भी विचार की सराहना की जाएगी।

उत्तर

14

पीटर, यह कहना मुश्किल है कि सभी संदर्भों को समझे बिना सबसे अच्छा समाधान क्या है - लेकिन एक दृष्टिकोण जिसका आप उपयोग कर सकते हैं findAndModify है। यह एक दस्तावेज़ के लिए पूछताछ करेगा और इसे वापस कर देगा, और इसके लिए एक अपडेट भी लागू करेगा।

आप प्रक्रिया के लिए एक दस्तावेज़ खोजने के लिए इसका उपयोग कर सकते हैं और एक साथ "स्थिति" फ़ील्ड को संसाधित करने के लिए इसे संशोधित करने के लिए संशोधित कर सकते हैं, ताकि अन्य कर्मचारी इसे इस तरह पहचान सकें और इसे अनदेखा कर सकें।

यहाँ एक उदाहरण है कि उपयोगी हो सकता है नहीं है: http://docs.mongodb.org/manual/reference/command/findAndModify/

+0

यह वही है जो मुझे चाहिए। धन्यवाद एक टन आदमी। बस उत्सुक है लेकिन यह आदेश PHP में कैसे दिखेगा? मैं वर्तमान में इसमें देख रहा हूं लेकिन यदि आप मुझे एक उदाहरण दे सकते हैं जो बहुत अच्छा होगा। अगर मुझे पता चलता है कि पहले कैसे, मैं सभी को देखने के लिए कोड पोस्ट करूंगा। – PetersCodeProblems

+3

$ db-> कमांड (सरणी ('findandmodify' => 'संग्रहनाम', 'सॉर्ट' => सरणी ('बनाई गई' => 1), 'सीमा' => 1, 'निकालें' => सत्य)); – PetersCodeProblems

+0

यह PHP – PetersCodeProblems

-4

मैं नहीं mongodb के लिए नए और पूरी तरह से यकीन है कि क्या आपकी क्वेरी करने के लिए कोशिश कर रहा है, लेकिन यहाँ मैं इसे कैसे

# suppose database is staging 
# suppose collection is data 
use staging 
db.data.remove(<your_query_criteria>) 
करना होगा है कर रहा हूँ

नक्शा कहां है और इसमें कोई भी खोज मानदंड हो सकता है जो आप चाहते हैं

यह सुनिश्चित नहीं है कि इससे आपकी मदद मिलेगी।

7

के रूप में यहाँ प्रलेखित findAndRemove समारोह का उपयोग करें: http://api.mongodb.org/java/current/com/mongodb/DBCollection.html

findAndRemove समारोह निकालते हैं और मोंगो डेटाबेस से वस्तु और एक एकल (परमाणु) आपरेशन में इसे हटा दें।

findAndRemove (क्वेरी, प्रकार [, विकल्प], कॉलबैक)

  • क्वेरी वस्तु डेटाबेस से वस्तु पुनः प्राप्त करने के लिए किया जाता है (देखें collection.find())
  • तरह पैरामीटर का उपयोग किया जाता है (जहां पाया मामले कई में) परिणामों को सॉर्ट करने के लिए
+1

के लिए आदेश है कि उस लिंक का जवाब हो सकता है लेकिन कृपया उस लिंक से संबंधित उत्तर को अपने उत्तर में जोड़ें। लिंक तोड़ते हैं। – rene

+1

ऐसा लगता है कि मोंगोडीबी 3 जावा एपीआई में ढूंढें और रिमूव को एक और द्वारा हटाया गया है (और 'टीडीक्यूमेंट findOneAndDelete (बीसन फ़िल्टर, FindOneAndDeleteOptions विकल्प);' – titusn

1

मैं इस तथ्य टिप्पणी करने के लिए एक नया उत्तर बनाने:

के रूप में acce में @peterscodeproblems द्वारा टिप्पणी की पॉट उत्तर MongoDB में इस के मूल निवासी रास्ता अभी उपयोग करने के लिए

findAndModify(query=<document>, remove=True) 

रूप documentation से बताया है।

जैसा कि यह मूल है, और परमाणु है, मुझे उम्मीद है कि यह ऐसा करने का तेज़ तरीका होगा।

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