2011-08-16 122 views
19

當我將一些文檔插入一個集合(沒有ObjectID)時,mongoDB添加了自己的ObjectIDs。用mongoDB中的ObjectID查找文檔

我想通過其唯一的ObjectID查詢文檔。

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

它不要麼在「4e49fd8269fd873c0a000000」的前MongoID或對象ID的前綴工作。

在PHP中使用mongoDB通過ObjectID查詢的正確方法是什麼?

+0

它可以在控制檯 「對象ID」 在4e49fd的面前......但不是在PHP。 – InspiredJW

回答

50

很肯定你必須使用一個MongoId對象,如

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

Querying頁面上的筆記是有點遲鈍,但它確實提...

除非用戶指定否則,_id字段是MongoId。最常見的錯誤是使用字符串來匹配MongoId。請記住,這是兩個不同的數據類型,並不會以同樣的方式相互匹配字符串「陣列()」是不一樣的一個空數組

+0

我寫了相同的查詢,但查詢不起作用。 $ collection = $ db-> Collection(「video_detail」); (數組('user_id'=> new MongoId(「575289f33a31b98a4c8b4567」))); –

10

我覺得現在的API變化MongoDB\BSON\ObjectID ,還可以使用[]表示在PHP 5.4+一個數組,所以它應該是:根據菲爾的回答

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

+0

這是最新版本的正確解決方案。謝謝@coolgod – Bala

+0

This Works ...謝謝你 – Jpec

+0

這對我很有用,但是我有點不知所以''MongoDB \ BSON \ ObjectID'來自哪裏。就我所見,它並未在'vendor/mongodb'文件夾中的任何地方定義爲單獨的類。 NetBeans通常擅長項目自省,但它也看不到它。但它的工作原理! – halfer

0

隨着alcaeus/mongo-php-adapter(下PHP 7),以\MongoId轉換爲BSON類型需要:

$filter = []; 
$filter['_id'] = (new \MongoId('4e49fd8269fd873c0a000000'))->toBSONType(); 
$cursor = $collection->find($filter); 
相關問題