How to remove a document referenced by an id in mongoDB from php?

前端 未结 3 1248
眼角桃花
眼角桃花 2020-12-11 13:34

I was successful in deleting documents using other fields but could not delete using \"_id\" field. The PHP page says that the id should be a string (which it is by default)

3条回答
  •  爱一瞬间的悲伤
    2020-12-11 14:07

    You've used a normal integer (MongoInt32) as _id field. And MongoInt32 is not the same as MongoID. They are two different classes. You are suppose to delete it with:

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

    Additional Information:

    MongoId is used as value for an _id field if you don't set a value yourself, such as with:

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

    If you retrieve this document, and var_dump() that you will see:

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

    The note in the docs mean that you can't remove that document now with:

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

    But instead you will need to use:

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

    As last point I'd like to raise that you don't really have to use new MongoInt32(1) in the first place, you can just use:

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

    You only need MongoInt32/MongoInt64 in case you're on a 32-bit platform (or Windows) and need to deal with large numbers.

提交回复
热议问题