Когда я вставлял некоторые документы в коллекцию (без ObjectID), mongoDB добавляет свои собственные ObjectID.
Я хочу запросить документ по его уникальному ObjectID.
$db->collection_name->find(array('_id'=>'4e49fd8269fd873c0a000000')));
Он не работает ни с префиксом MongoID, ни с ObjectID перед «4e49fd8269fd873c0a000000».
Каков правильный способ запроса ObjectID с помощью mongoDB в PHP?
MongoId
, что вам нужно использовать объект MongoId
, например
$item = $collection->findOne(array( '_id' => new MongoId('4e49fd8269fd873c0a000000')));
Заметки на странице Querying немного тупые, но он упоминает …
Если пользователь не указал иное, поле _id является MongoId. Наиболее распространенная ошибка заключается в том, чтобы использовать строку для соответствия MongoId. Имейте в виду, что это два разных типа данных и не будут соответствовать друг другу таким же образом, что строка «array ()» не совпадает с пустым массивом
Я думаю, теперь API изменится на MongoDB\BSON\ObjectID
, также вы можете использовать []
для обозначения массива в PHP 5.4+, поэтому он должен быть:
$item = $collection->findOne(['_id' => new MongoDB\BSON\ObjectID( idToken )]);
основанный на ответе Фила.