2011-08-16 9 views
19

Po włożeniu niektórych dokumentów do kolekcji (bez identyfikatora ObjectID) mongoDB dodaje własne ObjectIDs.Znajdź dokument z identyfikatorem obiektu w mongoDB

Chcę wysłać zapytanie do dokumentu przez jego unikalny identyfikator ObjectID.

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

To nie działa albo z prefiksem MongoID lub objectID przed „4e49fd8269fd873c0a000000”.

Jaki jest właściwy sposób na zapytanie przez ObjectID z mongoDB w PHP?

+0

To działa w konsoli z "objectID" przed 4e49fd ... ale nie w PHP. – InspiredJW

Odpowiedz

50

pewien, że musiał użyć MongoId obiektu, np

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

Noty na stronie Querying są trochę tępy, ale nie wspomina ...

chyba że użytkownik ma określony w przeciwnym razie, pole _id jest MongoId. Najczęstszym błędem jest użycie ciągu, aby dopasować MongoId. Należy pamiętać, że są to dwa różne typy danych, a nie pasują do siebie w taki sam sposób, że „array()” ciąg nie jest taka sama jak pustą tablicę

+0

Piszę to samo zapytanie, ale zapytanie nie działa. $ collection = $ db-> Collection ("video_detail"); $ cursor = $ kolekcja-> findOne (tablica ("user_id" => nowy MongoId ("575289f33a31b98a4c8b4567"))); –

10

myślę teraz zmiany API do MongoDB\BSON\ObjectID , również można użyć [] oznaczający tablicę w PHP 5.4+, więc powinno być:

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

na podstawie odpowiedzi Phila.

+0

to właściwe rozwiązanie dla najnowszej wersji. Dzięki @coolgod – Bala

+0

To działa ... dzięki człowiekowi – Jpec

+0

To działa dla mnie, ale jestem trochę zagubiony, aby zrozumieć skąd pochodzi 'MongoDB \ BSON \ ObjectID'. Nie jest zdefiniowany nigdzie w folderze 'vendor/mongodb' jako osobna klasa, o ile widzę. NetBeans jest zwykle dobry w introspekcji projektu, ale go również nie widzi. A jednak działa! – halfer

0

Z alcaeus/mongo-php-adapter (w php 7), potrzebny do konwersji \MongoId rodzaju BSON:

$filter = []; 
$filter['_id'] = (new \MongoId('4e49fd8269fd873c0a000000'))->toBSONType(); 
$cursor = $collection->find($filter); 
Powiązane problemy