可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
When I inserted some documents into a collection (without an ObjectID) mongoDB adds its own ObjectIDs.
I want to query a document by its unique ObjectID.
$db->collection_name->find(array('_id'=>'4e49fd8269fd873c0a000000')));
It does not work either with prefix of MongoID or ObjectID in front of '4e49fd8269fd873c0a000000'.
What is the proper way to query by ObjectID with mongoDB in PHP?
回答1:
Pretty sure you have to use a MongoId
object, eg
$item = $collection->findOne(array( '_id' => new MongoId('4e49fd8269fd873c0a000000')));
The notes on the Querying page are a little obtuse but it does mention...
Unless the user has specified otherwise, the _id field is a MongoId. The most common mistake is attepting to use a string to match a MongoId. Keep in mind that these are two different datatypes, and will not match each other in the same way that the string "array()" is not the same as an empty array
回答2:
I think now the API changes to MongoDB\BSON\ObjectID
, also you can use []
to denote an array in PHP 5.4+, so it should be:
$item = $collection->findOne(['_id' => new MongoDB\BSON\ObjectID( idToken )]);
based on Phil's answer.
回答3:
With alcaeus/mongo-php-adapter (under php 7), needed to convert \MongoId
to BSON type:
$filter = []; $filter['_id'] = (new \MongoId('4e49fd8269fd873c0a000000'))->toBSONType(); $cursor = $collection->find($filter);