3

私は MongoDB を学んでおり、MongoDB データベースに保存されているデータは JSON と非常によく似た形式であったため、jQuery のgetJSON()メソッドから直接 MongoDB にクエリを実行できることを望んでいました。

driverただし、アプリケーションからデータベースにアクセスするには、MongoDB と a が必要なようです。というわけで、当面は PHP ドライバーを使用します。

フィールドの を返そうとしてvaluecontentます:

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 の用語は を返すと思いますが、それはcursorPHP 配列ですか、JSON データですか、それとも何か他のものですか?

  2. getJSON()必要なデータを返すためにコードで行う正しい「呼び出し」は何ですか?

    現時点で、Firebug は次のように表示しています。

    TypeError: results[0] is undefined
    

アップデート

getJSON()コードを次のように変更しました。

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

そして今、私はエラーを取得しませんが、Firebug から次のようになります:

[応答] タブに表示される内容: {}

JSON タブの表示: このオブジェクトに表示するプロパティはありません。

4

1 に答える 1

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 の配列に入れます。

編集

false2 番目の$use_keys引数として を指定すると、結果が (各ドキュメントiterator_to_array()のフィールドではなく) 数値でインデックス付けされることが保証されます。_id

于 2013-09-04T13:52:30.517 に答える