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

如何从php中删除mongoDB中id引用的文档?,php,mongodb,Php,Mongodb,我成功地使用其他字段删除了文档,但无法使用_id字段删除。PHP页面说id应该是一个默认的字符串,但我试图做的是,给出一个我自己的id,它是一个整数,我正在做以下操作: 这是我的文档结构: $document = array ( '_id' => new MongoInt32(1), 'cust_id' => 'abc124' ) 这就是我试图删除的方式: $collection->remove(array('_id' => new MongoId(1)

我成功地使用其他字段删除了文档,但无法使用_id字段删除。PHP页面说id应该是一个默认的字符串,但我试图做的是,给出一个我自己的id,它是一个整数,我正在做以下操作:

这是我的文档结构:

$document = array (
    '_id' => new MongoInt32(1),
    'cust_id' => 'abc124'
)
这就是我试图删除的方式:

$collection->remove(array('_id' => new MongoId(1)), true);
但这给了我一个错误。PHP手册上说:

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

但是我的id是int,我无法理解删除id引用的文档的过程

谢谢你的帮助。多谢各位

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

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

考虑到这一点,您需要通过另一个对象(即MongoInt32)进行搜索:


您使用了一个普通整数MongoInt32作为_id字段。MongoInt32与MongoID不同。他们是两个不同的班级。您应该使用以下命令删除它:

$collection->remove( array( '_id' => new MongoInt32(1) ) );
其他信息:

如果您自己没有设置值,则MongoId将用作_id字段的值,例如:

$collection->insert( array( 'cust_id' => 'abc124' ) );
如果检索此文档,您将看到:

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' ) ) );
作为最后一点,我想提出的是,您首先不必使用新的MongoInt321,您可以使用:

$document = array (
    '_id' => 1,
    'cust_id' => 'abc124'
);
如果您在32位平台或Windows上,需要处理大量数据,则只需要MongoInt32/MongoInt64。

这应该可以:

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

您的字段是MongoInt32,但您正在通过Mongoid删除,非常感谢。这个对我来说很有用…@PHP7.2。
$collection->deleteOne( array( '_id' => new MongoDB\BSON\ObjectId ($_id )) );