2011-11-10 31 views
12

Tôi có một ứng dụng Android gửi dữ liệu json tới tập lệnh PHP. Tập lệnh PHP phải lưu dữ liệu vào MongoDb.Chèn JSON vào MongoDb trực tiếp từ PHP

Khi tôi chèn dữ liệu, MongoDb xử lý dữ liệu này dưới dạng chuỗi.

$ conn = new Mongo ('mongodb: //127.0.0.1: 27017');

// access database 
$db = $conn->Data; 

// access collection 
$collection = $db->Collection; 
$collection->insert($myjson) 

Làm cách nào tôi có thể nói với trình điều khiển PHP MongoDb rằng nó đã là tài liệu json.

Cảm ơn

Trả lời

16

Các PHP MongDB điều khiển chấp nhận mảng cho chèn và truy vấn (xem ở đây: http://www.php.net/manual/en/mongo.queries.php)

Vì vậy, bạn cần phải chuyển đổi JSON của bạn đến một mảng.

May mắn thay, nói chung đây là khá dễ dàng ... đây là một đoạn trích từ một mảnh còn mã (xem này article) để chèn dữ liệu JSON từ API Twitter vào một mảng, sau đó vào MongoDB:

// Convert JSON to a PHP array 
$usertimeline = json_decode($usertimeline); 

// Loop array and create seperate documents for each tweet 
foreach ($usertimeline as $id => $item) { 
    $collection->insert($item); 
} 

Lưu ý rằng json_decode() ở đó biến JSON thành một mảng PHP.

+6

Làm cách nào bạn xử lý chèn kiểu dữ liệu Mongo gốc như MongoDate? – karnage

0

MongoDB sử dụng BSON không JSON nên bạn cần mã hóa lại mọi thứ. Ngoài ra, tôi nhớ nói chuyện với kchodorow về điều này và giao diện thô không được phơi bày sau đó (ít nhất là nửa năm) và tôi nghi ngờ nó bây giờ là như vậy ngay cả khi bạn quản lý để lấy dữ liệu BSON từ đâu đó, bạn không thể tránh được/mã hóa.

2

Đây là mẹo dành cho những người muốn thực hiện việc này, nhưng muốn cập nhật các bản ghi thay vì chèn các bản ghi mới. Để có được cách tiếp cận của Justin, tôi phải đảm bảo rằng tôi chuyển đổi đối tượng _id cho từng mục thành MongoId:

// Convert JSON to a PHP array 
$usertimeline = json_decode($usertimeline); 

// Loop array and create seperate documents for each tweet 
foreach ($usertimeline as $id => $item) { 
    $mongo_id = new MongoId($id); 
    $item->_id = $mongo_id; 
    $collection->update(array('_id' => $mongo_id), $item); 
} 
Các vấn đề liên quan