Perl mongo $ coll-> find_one({“_ id”=>“xxxx”})方法无法按预期运行

时间:2011-03-30 00:42:30

标签: perl mongodb

我知道其他用户已经问过这个问题。我测试它不起作用。当使用$ coll-> remove({“_ id”=>“xxxx”})而不是预期的时候,我发现了这个问题。

以下是我的测试摘要:

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

$ VAR1 = undef;

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

使用_id =>打印出一份文件“4d9274032e62007c16110000”

自动生成的_id对象是否可用于管理文档?

2 个答案:

答案 0 :(得分:2)

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

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

_id 不是字符串。它是一个12字节的二进制值,存储为BSON对象:

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

您可以通过_id删除,但不能使用24位十六进制字符串表示。这与您已经发现的find_one()完全相同。

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

答案 1 :(得分:0)

objectid和它的字符串表示之间有明显的区别。如果在这里实际使用ObjectId为_id,为什么第一个带有字符串表示形式的find_one()会返回结果?因此行为是完全正确的 - 与使用的驱动程序无关。如果您出于任何原因引入字符串对象ID,那么您将能够按字符串搜索。只要驱动程序注入了decicated objectid(不是字符串),你就必须通过它们而不是字符串表示来搜索。