这是示例代码:
$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,而不是字符串。 控制台上的相同逻辑工作正常,并正确删除了记录。
答案 0 :(得分:2)
这对我有用。这是代码:
$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
你确定某处有拼写错误吗?
答案 1 :(得分:0)
与php ==运算符不同,mongo的等式运算符总是使用“对象相等”,就像php的相同比较运算符(===)或java的.equals()。虽然你的代码看起来好像应该可以工作(并且对我来说测试数据集确实很好),但是你的数据集可能会导致php将返回的MongoId强制转换为字符串。 Read more about MongoId here
通过执行查询本身的var_dump,确保您的查询提供MongoId以进行比较。此外,请确保您运行的是最新版本的PHP Mongo驱动程序。
答案 2 :(得分:0)
由于PHP的类型是松散的,因此最重要的是要确保将所有输入值和搜索值强制转换为预期的和一致的数据类型,否则它肯定无法找到您预期的文档。
在PHP中使用MongoDB时,为了避免任何可能的混淆或错误,我有意识地强制转换所有内容。
此外,groups.google.com上的mongodb-user组非常好并且反应灵敏,所以如果您还没有使用该资源,我肯定会考虑加入它。