Подтвердить что ты не робот

Найти документ с ObjectID в mongoDB

Когда я вставил некоторые документы в коллекцию (без ObjectID), mongoDB добавляет свои собственные идентификаторы ObjectID.

Я хочу запросить документ по его уникальному ObjectID.

$db->collection_name->find(array('_id'=>'4e49fd8269fd873c0a000000')));

Он не работает ни с префиксом MongoID, ни с ObjectID перед "4e49fd8269fd873c0a000000".

Каков правильный способ запроса ObjectID с помощью mongoDB в PHP?

4b9b3361

Ответ 1

Довольно уверен, что вам нужно использовать объект MongoId, например

$item = $collection->findOne(array(
    '_id' => new MongoId('4e49fd8269fd873c0a000000')));

Заметки на странице Querying немного тупые, но они упоминают...

Если пользователь не указал иное, поле _id является MongoId. Наиболее распространенная ошибка заключается в том, чтобы использовать строку для соответствия MongoId. Имейте в виду, что это два разных типа данных и не будут совпадать друг с другом таким же образом, что строка "array()" не совпадает с пустым массивом

Ответ 2

Я думаю, теперь API изменится на MongoDB\BSON\ObjectID, также вы можете использовать [] для обозначения массива в PHP 5.4+, поэтому он должен быть:

$item = $collection->findOne(['_id' => new MongoDB\BSON\ObjectID( idToken )]);

на основе ответа Фила.