ドキュメント(ObjectIDなし)をドキュメントに挿入すると、mongoDBは独自のObjectIDを追加します。
一意のObjectIDでドキュメントをクエリしたい。
$db->collection_name->find(array('_id'=>'4e49fd8269fd873c0a000000')));
'4e49fd8269fd873c0a000000'の前にあるMongoIDまたはObjectIDのプレフィックスでは機能しません。
PHPでmongoDBを使用してObjectIDでクエリを実行する適切な方法は何ですか?
APIがMongoDB\BSON\ObjectID
に変更されたと思います。また、[]
を使用してPHP 5.4+の配列を示すことができるため、次のようになります。
$item = $collection->findOne(['_id' => new MongoDB\BSON\ObjectID( idToken )]);
フィルの答えに基づいています。
MongoDBの最新バージョンであるMongoDB\Driver\Managerの場合、次の機能するコードを検討してください。
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 />";
}
alcaeus/mongo-php-adapter (php 7の場合)を使用して、\MongoId
からBSONタイプへ:
$filter = [];
$filter['_id'] = (new \MongoId('4e49fd8269fd873c0a000000'))->toBSONType();
$cursor = $collection->find($filter);