Find a document with ObjectID in mongoDB
When I inserted some documents into a collection (without an ObjectID) mongoDB adds its own ObjectIDs.
I want to query a document by its unique ObjectID.
$db->collection_name->find(array('_id'=>'4e49fd8269fd873c0a000000')));
It does not work either with prefix of MongoID or ObjectID in front of '4e49fd8269fd873c0a000000'.
What is the proper way to query by ObjectID with mongoDB in PHP?
Pretty sure you have to use a MongoId
object, eg
$item = $collection->findOne(array(
'_id' => new MongoId('4e49fd8269fd873c0a000000')));
The notes on the Querying page are a little obtuse but it does mention...
Unless the user has specified otherwise, the _id field is a MongoId. The most common mistake is attepting to use a string to match a MongoId. Keep in mind that these are two different datatypes, and will not match each other in the same way that the string "array()" is not the same as an empty array
I think now the API changes to MongoDB\BSON\ObjectID
, also you can use []
to denote an array in PHP 5.4+, so it should be:
$item = $collection->findOne(['_id' => new MongoDB\BSON\ObjectID( idToken )]);
based on Phil's answer.
For MongoDB\Driver\Manager, a modern version of a MongoDB, you might consider the following working code:
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";
}
For testing purposes:
foreach ($docs as $doc) {
print_r($doc);
//or you can: echo "$doc->item $row->qty $row->status<br />";
}
With alcaeus/mongo-php-adapter (under php 7), needed to convert \MongoId
to BSON type:
$filter = [];
$filter['_id'] = (new \MongoId('4e49fd8269fd873c0a000000'))->toBSONType();
$cursor = $collection->find($filter);
ReferenceURL : https://stackoverflow.com/questions/7074309/find-a-document-with-objectid-in-mongodb
'it-source' 카테고리의 다른 글
Axios put 요청 문제 (0) | 2023.06.25 |
---|---|
How to remove unused using namespaces (0) | 2023.06.25 |
com.구글화력 기지파이어베이스예외:내부 오류가 발생했습니다.[ 구성_Not_Found ] (0) | 2023.06.25 |
모카에 대한 테스트 디렉토리를 지정하는 방법은 무엇입니까? (0) | 2023.06.25 |
유형 스크립트에서 null 가능한 값을 반환하려면 어떻게 해야 합니까? (0) | 2023.06.25 |