2011-08-16 4 views
19

Khi tôi chèn một số tài liệu vào bộ sưu tập (không có ObjectID), mongoDB thêm các ObjectID riêng của nó.Tìm tài liệu với ObjectID trong mongoDB

Tôi muốn truy vấn tài liệu bằng ObjectID duy nhất của nó.

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

Nó không hoạt động với tiền tố MongoID hoặc ObjectID trước '4e49fd8269fd873c0a000000'.

Cách thích hợp để truy vấn bằng ObjectID với mongoDB trong PHP là gì?

+0

Nó hoạt động trong giao diện điều khiển với "ObjectId" trước 4e49fd ... nhưng không phải trong PHP. – InspiredJW

Trả lời

50

Đẹp, chắc chắn bạn phải sử dụng một đối tượng MongoId, ví dụ:

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

Các thuyết minh từ trang Querying là một chút u mê nhưng nó đề cập đến ...

Trừ khi người sử dụng đã quy định nếu không, trường _id là một MongoId. Sai lầm phổ biến nhất là attepting sử dụng một chuỗi để phù hợp với MongoId. Hãy nhớ rằng đây là hai kiểu dữ liệu khác nhau và sẽ không khớp với nhau theo cùng một cách mà chuỗi "mảng()" không giống với một mảng trống

+0

Tôi viết cùng một truy vấn, nhưng truy vấn không hoạt động. $ collection = $ db-> Bộ sưu tập ("video_detail"); $ cursor = $ collection-> findOne (mảng ('user_id' => mới MongoId ("575289f33a31b98a4c8b4567"))); –

10

Tôi nghĩ rằng bây giờ API sẽ thay đổi thành MongoDB\BSON\ObjectID , cũng có thể bạn có thể sử dụng [] để biểu thị một mảng trong PHP 5.4+, vì vậy nó cần được:

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

dựa trên câu trả lời của Phil.

+0

giải pháp phù hợp cho phiên bản mới nhất. Cảm ơn @coolgod – Bala

+0

Tác phẩm này ... cảm ơn người đàn ông – Jpec

+0

Điều này phù hợp với tôi, nhưng tôi hơi mất một chút để hiểu nơi 'MongoDB \ BSON \ ObjectID' đến từ đâu. Nó không được định nghĩa ở bất kỳ đâu trong thư mục 'vendor/mongodb' như là một lớp riêng biệt, theo như tôi thấy. NetBeans thường là tốt tại introspection dự án, nhưng nó không thể nhìn thấy nó hoặc. Và nó hoạt động! – halfer

0

Với alcaeus/mongo-php-adapter (dưới php 7), cần thiết để chuyển đổi \MongoId để loại BSON:

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