Sathya
Sathya

Reputation: 5308

How to return JSON data from php MongoCursor

I am using PHP to connect with MongoDB. My code is as follows.

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

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

i want to return $customers collection as json document to my HTML. How can i do this?

Upvotes: 12

Views: 17036

Answers (3)

Archangel
Archangel

Reputation: 92

Other answers work, but it is good to know that the generated JSON will have the following form (in this example I use an hypothetical "name" field for your customers):

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

So in case you don't want the Object _id to be the key of each of your result objects you can add a false parameter to iterator_to_array. Your code would be:

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

This creates the same result as

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

which is an array of JSON objects

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

Upvotes: 4

Sathya
Sathya

Reputation: 5308

This also will work. And you can customize your json as well.

    $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);

Upvotes: 8

Sammaye
Sammaye

Reputation: 43884

You can do this two ways:

echo json_encode(iterator_to_array($customers));

or you can manually scroll through it:

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

Each of MongoDBs objects should have their __toString() methods correctly implemented to bring back the representation of the value.

Upvotes: 22

Related Questions