1

我成功地使用其他字段删除文档,但无法使用“_id”字段删除。PHP页面说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 引用的文档的过程。

您的帮助将不胜感激。谢谢你。

4

3 回答 3

13

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

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

附加信息:

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

$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。

于 2013-07-23T12:23:20.727 回答
3

这应该有效:

$collection->deleteOne( array( '_id' => new MongoDB\BSON\ObjectId ($_id )) );
于 2017-10-19T04:08:48.120 回答
1

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

通常,PHP 手册中的说明是正确的,但不适合您。您已将 your 的类型更改为(aka a )_id以外的类型。ObjectIdMongoId

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

$db->collection->remove(array('_id'=>new MongoInt32(1)))
于 2013-07-23T12:22:49.003 回答