如何从php中删除mongoDB中id引用的文档?

时间:2013-07-23 12:16:25

标签: php mongodb

我成功使用其他字段删除文档但无法使用“_id”字段删除。 PHP页面说id应该是一个字符串(默认情况下是这样),但我想要做的是,给出一个我自己的id,这是一个整数,并且我正在做以下事情:

这是我的文档结构:

$document = array (
    '_id' => new MongoInt32(1),
    'cust_id' => 'abc124'
)

这就是我要删除的方式:

$collection->remove(array('_id' => new MongoId(1)), true);

但是这给了我一个错误。 PHP php手册说:

  

“要根据文档ID删除文档,您需要确保将ID作为MongoID对象而不仅仅是字符串传递:”

但是我的id是一个int,我无法弄清楚删除id引用的文档的过程。

我们将不胜感激。谢谢。

3 个答案:

答案 0 :(得分:12)

您使用普通整数(MongoInt32)作为_id字段。 MongoInt32与MongoID不同。他们是两个不同的类。您可以使用以下命令将其删除:

$collection->remove( array( '_id' => new MongoInt32(1) ) );

其他信息:

如果自行设置值,MongoId将用作_id字段的值,例如:

$collection->insert( array( 'cust_id' => 'abc124' ) );

如果您检索此文档,您将看到var_dump():

array(2) {
  '_id' =>
  class MongoId#6 (1) {
    public $$id =>
    string(24) "51ee74e944670a09028d4fc9"
  }
  'cust_id' =>
  string(6) "abc124"
}

文档中的注释表示您现在无法删除该文档:

$collection->remove( array( '_id' => '51ee74e944670a09028d4fc9' ) );

但你需要使用:

$collection->remove( array( '_id' => new MongoID( '51ee74e944670a09028d4fc9' ) ) );

最后一点我想提一下,你首先不必使用new MongoInt32(1),你可以使用:

$document = array (
    '_id' => 1,
    'cust_id' => 'abc124'
);

如果您使用的是32位平台(或Windows),并且需要处理大量数据,则只需要MongoInt32 / MongoInt64。

答案 1 :(得分:1)

  

“要根据文档ID删除文档,您需要确保将ID作为MongoID对象而不仅仅是字符串传递:”

通常PHP手册所述的内容是正确的,但不适合您。您已将_id的类型更改为ObjectId以外的其他内容(也称为MongoId)。

考虑到这一点,您需要搜索其他对象MongoInt32

$db->collection->remove(array('_id'=>new MongoInt32(1)))

答案 2 :(得分:1)

这应该有效:

$collection->deleteOne( array( '_id' => new MongoDB\BSON\ObjectId ($_id )) );