2012-08-31 29 views
5

में MongoDB GridFS में एक से अधिक फ़ाइलों को हटा दें।मैं <code>PHP</code> में <code>MongoDB</code> और <code>GridFS</code> उपयोग कर रहा हूँ, और यह पता लगाने कैसे <code>_id</code> द्वारा एक से अधिक फ़ाइलों को हटाने के लिए करने की कोशिश कर पीएचपी

यहाँ है कोड मैं:

$ids = array("50401f40ff558cec38000061", "62401f40ff558cec38000072", "73401f40ff558cec38000083"); 
$mongo_ids = array(); 
foreach($ids as $id) { 
    $mongo_ids[] = new MongoId($id); 
} 

$mongo_grid_fs->remove(array("_id" => $mongo_ids)); 

किसी भी विचार मैं गलत क्या कर रहा हूँ?

+0

'MongoDB :: lastError()' और बाद के परिणाम की जांच यदि आपको – Lusitanian

उत्तर

3

यह एक अनुरोध के साथ क्या करना असंभव: तुम वैसे भी पाशन कर रहे हैं के बाद से, आप कुछ इस तरह कर सकते हैं।

  • फ़ाइलें
  • चंक्स

Inorder एक GridFs फ़ाइल आप इन तालिका के दोनों क्वेरी चाहिए नष्ट करने के लिए:

आप दो संग्रह है। चूंकि निकालें() फ़ंक्शन वास्तव में खंड संग्रह को कॉल करता है और फिर फ़ाइल संग्रह से फ़ाइल को हटा देता है।

चूंकि मोंगोडीबी मूल रूप से एक अनुरोध में दो संग्रहों को क्वेरी नहीं कर सकता (मूल रूप से हटाया गया) आपको अन्य फाइलों को हटाने के लिए एक डिलीट अनुरोध भेजना होगा अन्यथा आप अपने हिस्सों के संग्रह में स्थान लेने वाले हिस्सों को छोड़ देंगे।

इस तरह, इसे ध्यान में रखते हुए @ToddMoses उत्तर सही है।

आप निश्चित उपयोग की कर सकते हैं: http://www.php.net/manual/en/mongogridfs.remove.php लेकिन मेरा मानना ​​है कि यह बिल्कुल वही बात, बस निकाला है तो आपकी क्वेरी किया जाना चाहिए था:

$mongo_grid_fs->remove(array("_id" => array('$in' => $mongo_ids))); 
+0

यह समाधान था, '$ in' का उपयोग करके दूसरी सरणी की आवश्यकता है। धन्यवाद। – Justin

2

सबसे पहले, गलत क्या हो रहा है यह जानने के लिए MongoDB :: lastError() का उपयोग करें। MongoGridFS :: हटाने में विफल होने पर आपको संदेश के साथ प्रस्तुत नहीं किया जाएगा। ऐसा कुछ करें:

$errorArray = $db->lastError(); 
var_dump($errorArray); 

ऐसा लगता है कि समस्या यह है कि आप मानदंड सही तरीके से सेट नहीं कर रहे हैं।

public bool MongoGridFS::delete (mixed $id) 

इस डेटाबेस से एक फ़ाइल को हटा देता है, जबकि हटाने संग्रह से फ़ाइलों को हटा देता: करने के लिए बस को हटाएँ का उपयोग कर रहा है के बजाय हटाएँ के बाद से निकालें सबसे आसान काम अपने ही पैरामीटर के रूप में एक आईडी लेता है। कारण तरीका है कि वास्तव में GridFS काम करता है के लिए

foreach($ids as $id) { 
    $mongo_grid_fs->delete($id); 
} 
+0

पर कोई फर्क नहीं पड़ता है, लेकिन यह कई अनुरोध करता है, इस प्रकार कम कुशल होता है, तो एक ही अनुरोध करना पसंद करता है, जो संभव होने पर एकाधिक आईडी में गुजरता है। – Justin