2011-03-30 27 views
0

我知道另一個用戶提出了這個問題。我測試,它不起作用。當使用$ coll-> remove({「_ id」=>「xxxx」})時,我發現這個問題不符合預期。

以下是我的測試總結:=民主基金

print Dumper $db->posts->find_one({"_id" => "4d92740b2239007c16130000"}); 

$ VAR1;

print Dumper $db->posts->find_one({"_id" => $conn->oid("4d92740b2239007c16130000")}); 

打印出具有_id =>文件 「4d9274032e62007c16110000」

是否自動生成的_id對象可用於管理文件?

+0

可能重複[Perl的MongoDB中刪除記錄的問題。(http://stackoverflow.com/questions/5475636/perl-mongodb-remove-record-question) – 2011-03-30 01:17:04

+0

請不要問同樣的問題兩次。如果您的上一個問題沒有得到解答,請將其編輯爲更具體或更具描述性。 – 2011-03-30 01:18:04

回答

0

objectid和它的字符串表示之間有明顯的區別。爲什麼第一個使用字符串表示形式的find_one()會返回結果,如果在這裏實際使用ObjectId作爲_id的話?所以行爲是完全正確的 - 獨立於所使用的驅動程序。如果你出於任何原因引入你的字符串對象id,那麼你將能夠通過字符串進行搜索。只要驅動程序注入了decicated objectid(不是字符串),您將不得不按照它們的字符串表示進行搜索。

2

http://www.mongodb.org/display/DOCS/Removing

db.things.remove({_id: myobject._id}); 

_id的字符串。這是存儲爲BSON對象12字節的二進制值:

http://www.mongodb.org/display/DOCS/Object+IDs

您可以通過_id刪除,但你不能使用24位十六進制字符串表示。這與您已經發現的find_one()的行爲完全相同。

$coll->remove({"_id" => $myObject->{_id}}); 
+0

問題是無法通過_id找到myobject。你應該解釋一下如何使用id字符串來查找myobject? – Weiyan 2011-03-30 02:04:57