12

我正在使用 PHP 连接 MongoDB。我的代码如下。

// connect
$m = new MongoClient($con_string); // connect to a remote host at a given port
$db = $m->main;

$customers = $db->customer->find();

我想将 $customers 集合作为 json 文档返回到我的 HTML。我怎样才能做到这一点?

4

3 回答 3

21

您可以通过以下两种方式执行此操作:

echo json_encode(iterator_to_array($customers));

或者您可以手动滚动浏览它:

foreach($customers as $k => $row){
    echo json_encode($row);
}

每个 MongoDB 对象都应该__toString()正确实现其方法以恢复值的表示。

于 2013-01-09T09:59:36.940 回答
8

这也将起作用。你也可以自定义你的json。

    $arr = array();

    foreach($customers as $c)
    {
        $temp = array("name" => $c["name"], "phone" => $c["phone"], 
                                            "address" => $c["address"]);
        array_push($arr, $temp);
    }

    echo json_encode($arr);
于 2013-01-09T10:00:04.253 回答
4

其他答案有效,但很高兴知道生成的 JSON 将具有以下形式(在此示例中,我为您的客户使用假设的“名称”字段):

{
    "5587d2c3cd8348455b26feab": {
        "_id": {
            "$id": "5587d2c3cd8348455b26feab"
        },
        "name": "Robert"
    },
    "5587d2c3cd8348455b26feac": {
        "_id": {
            "$id": "5587d2c3cd8348455b26feac"
        },
        "name": "John"
    }
}

因此,如果您不希望 Object_id成为每个结果对象的键,您可以将false参数添加到iterator_to_array. 您的代码将是:

echo json_encode(iterator_to_array($customers, false), true);

这会产生与

$result = Array();
foreach ($customers as $entry) {
    array_push($result, $entry);
}
echo json_encode($result, true);

这是一个 JSON 对象数组

[
    {
        "_id": {
            "$id": "5587d2c3cd8348455b26feab"
        },
        "name": "Robert"
    },
    {
        "_id": {
            "$id": "5587d2c3cd8348455b26feac"
        },
        "name": "John"
    }
]
于 2015-06-23T07:55:43.977 回答