如何从jQuery的getJSON()中查询MongoDB的PHP文件获取值?

时间:2013-09-04 13:21:37

标签: php jquery mongodb getjson

我正在学习MongoDB并希望因为存储在MongoDB数据库中的数据格式与JSON非常相似,所以我可以直接从jQuery的getJSON()方法查询MongoDB。

我正在学习,你似乎需要MongoDB和driver来从应用程序访问数据库。所以我暂时使用PHP驱动程序。

我正在尝试返回value字段的content

MongoDB文档

{
   "_id": ObjectId("34576347347"),
   "content": "here is some content",
   "field2": {
     "subfield1": {
       "0": "sf1v0",
       "1": "sf1v1",
       "2": "sf1v2" 
    },
     "subfield2": "value 2" 
  },
   "field2": "value 3" 
}

PHP

<?php 

$dbhost = 'username:password@127.x.xx.x:27017/';
$dbname = 'dbname';
$m = new MongoClient("mongodb://$dbhost");
$db = $m->$dbname;
$collection = $db->myCollection;
$query = $collection->find(array("field2.subfield2" => "value 2"));

header("Content-type: application/json");
echo json_encode($query);

?>

的jQuery

$.getJSON("http://path/to/mongo.php", {cid: href, format: 'json'}, function(results){  
$("#my_div").html(results[0].content);
}

我想我需要'得到'一些东西:

  1. PHP查询返回的内容:

    $query = $collection->find(array("field2.subfield2" => "value 2"));
    

    我认为MongoDB的术语是它返回cursor,但它是一个PHP数组,还是JSON数据还是别的什么?

  2. getJSON()代码中要回复所需数据的正确“调用”是什么?

    目前Firebug正在向我展示:

    TypeError: results[0] is undefined
    
  3. 更新

    我将getJSON()代码更改为:

    $("#my_div").html(results.content);
    

    现在我没有收到错误,但是来自Firebug的内容如下:

      

    响应标签显示:{}

         

    JSON选项卡显示:此对象没有要显示的属性。

1 个答案:

答案 0 :(得分:2)

您希望将从find()函数返回的游标转换为json_encode实际可以使用的内容,如下所示:

$cursor = $collection->find(array("field2.subfield2" => "value 2"));
echo json_encode(iterator_to_array($cursor, false));

这是因为在迭代游标之前不会运行查询。 Iterator_to_array基本上会耗尽光标,获取所有文档,并将它们放入json_encode的数组中。

修改

false指定为$use_keys的第二个iterator_to_array()参数将确保以数字方式(而不是每个文档的_id字段)对结果进行索引。