Найти документ с ObjectID в mongoDB - PullRequest
24 голосов
/ 16 августа 2011

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

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

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

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

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

Ответы [ 4 ]

56 голосов
/ 16 августа 2011

Уверен, вы должны использовать объект MongoId, например,

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

Примечания на странице Запрос немного тупые, но этоупоминание ...

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

15 голосов
/ 25 марта 2016

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

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

в зависимости от ответа Фила.

1 голос
/ 05 ноября 2018

Для MongoDB \ Driver \ Manager, современной версии MongoDB, вы можете рассмотреть следующий рабочий код:

try {
  $DB_CONNECTION_STRING="mongodb://YourCredentials";
  require '../../vendor/autoload.php';
  $manager = new MongoDB\Driver\Manager( $DB_CONNECTION_STRING );

  $filter = ['_id' => new MongoDB\BSON\ObjectID( '5bdf54e6d722dc000f0aa6c2' )];
  $options = [];

  $query = new MongoDB\Driver\Query($filter, $options);     
  $docs = $manager->executeQuery('YourDbName.YourCollectionName', $query);
}
catch (MongoDB\Driver\Exception\Exception $e) { 
  $filename = basename(__FILE__); 
  echo "The $filename script has experienced an error.\n"; 
  echo "It failed with the following exception:\n"; 
  echo "Exception:", $e->getMessage(), "\n"; 
} 

Для целей тестирования:

foreach ($docs as $doc) {
  print_r($doc);
  //or you can: echo "$doc->item  $row->qty  $row->status<br />";
}
0 голосов
/ 05 марта 2018

С alcaeus / mongo-php-adapter (под php 7), необходим для преобразования \MongoId в тип BSON:

$filter = [];
$filter['_id'] = (new \MongoId('4e49fd8269fd873c0a000000'))->toBSONType();
$cursor = $collection->find($filter);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...