29

いくつかのドキュメントを(ObjectIDなしで)コレクションに挿入すると、mongoDBは独自のObjectIDを追加します。

一意のObjectIDでドキュメントをクエリしたいと思います。

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

'4e49fd8269fd873c0a000000'の前にMongoIDまたはObjectIDのプレフィックスがある場合は機能しません。

PHPでmongoDBを使用してObjectIDでクエリを実行する適切な方法は何ですか?

4

4 に答える 4

58

MongoIdオブジェクトを使用する必要があることはかなり確実です。

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

クエリページのメモは少し鈍いですが、それは言及しています...

ユーザーが特に指定しない限り、_idフィールドはMongoIdです。最も一般的な間違いは、MongoIdと一致する文字列を使用しようとすることです。これらは2つの異なるデータ型であり、文字列「array()」が空の配列と同じではないのと同じように互いに一致しないことに注意してください

于 2011-08-16T06:27:29.317 に答える
28

APIがに変更されたと思います。PHP5.4以降で配列を示すためにMongoDB\BSON\ObjectID使用することもできるので、次のようになります。[]

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

フィルの答えに基づいています。

于 2016-03-24T22:14:21.107 に答える
4

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 />";
}
于 2018-11-04T21:14:26.010 に答える
1

alcaeus / mongo-php-adapter\MongoId (php 7の下)では、 BSONタイプに変換する必要があります:

$filter = [];
$filter['_id'] = (new \MongoId('4e49fd8269fd873c0a000000'))->toBSONType();
$cursor = $collection->find($filter);
于 2018-03-05T15:01:23.687 に答える