如何解决PHP mongoDb驱动程序无法获取数据,然后将其删除,该驱动程序无法正常工作
|| 这是示例代码: $r = $coll->findOne();
$coll->remove(array(\"_id\"=>$r[\"_id\"])); // use the same object id as retreived from DB
$ret=$coll->findOne(array(\"_id\"=>($r[\"_id\"])));
var_dump($ret); // dumps the records that was supposed to be deleted
集合中的记录具有MongoDB objectId,而不是字符串。
控制台上的相同逻辑工作正常,并正确删除了记录。
解决方法
这对我有用。这是代码:
$coll->drop();
print(\"Now have \".$coll->count().\" items\\n\");
$coll->insert(array(\"x\" => \'blah\'));
$coll->insert(array(\"x\" => \"blahblah\"));
print(\"Inserted \".$coll->count().\" items\\n\");
$x = $coll->findOne();
print(\"Object X\\n\");
print_r($x);
$query_x = array(\'_id\' => $x[\'_id\']);
$coll->remove($query_x);
print(\"Removed 1 item,now have \".$coll->count().\" items\\n\");
$y = $coll->findOne($query_x);
print(\"Object Y\\n\");
print_r($y);
这是输出:
Now have 0 items
Inserted 2 items
Object X
Array
(
[_id] => MongoId Object
(
[$id] => 4d8d124b6803fa623b000000
)
[x] => blah
)
Removed 1 item,now have 1 items
Object Y
您确定某处没有错字吗?
, 与php ==运算符不同,mongo的equals运算符始终使用\“ Object equal \”,就像php \的相同比较运算符(===)或java \的.equals()一样。虽然您的代码看起来应该可以工作(对于测试数据集,它确实可以正常工作),但有关您的数据集的某些内容可能会导致php将返回的MongoId转换为字符串。在此处阅读有关MongoId的更多信息。
通过执行查询本身的var_dump,确保您的查询提供了MongoId进行比较。另外,请确保您正在运行最新版本的PHP Mongo驱动程序。
, 由于PHP是松散类型的,因此最重要的是要确保将所有输入值和搜索值都转换为期望的和一致的数据类型,否则肯定不会找到期望的文档。
在PHP中使用MongoDB时,我有意对所有内容进行强制转换,以避免任何可能的混乱或错误。
另外,groups.google.com上的mongodb-user组非常出色且响应迅速,因此,如果您尚未使用该资源,我肯定会考虑加入。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。