2011-03-30 16 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