用于解析mongodb聚合返回的JSON的JavaScript

时间:2014-02-14 16:14:02

标签: javascript php mongodb

我不确定是否已经提出了类似的问题,但我现在无法在搜索时找到它。我正在使用PHP-Mongodb Aggregate返回一个json,如下所示..

{"result":[{"_id":{"$id":"52fe557edf80a7a916b68612"},"numComments":3},{"_id":    {"$id":"52dbabb34d4a130c43e6d12c"},"numComments":1}],"ok":1}

这是我正在使用的聚合..

$result = $collection->aggregate(array(
                    array( '$match' => array( 'hide' => 0 )),
                    array('$unwind' => '$comments'),
                    array( '$group' => array( "_id" => '$_id',
                             'numComments' => array( '$sum' => 1)  ,
                            )
                        ),
                    array( '$sort' => array ( "numComments" => -1 )),
                    array('$limit' => 2)
                )
            );        

  echo json_encode($result);

我无法通过我的javascript解析输出(如前所述)只返回$ id和numComments值。我尝试通过几个$ .each循环它们,但我总是将它们视为未定义,猜测我已经接近但尚未解决。

关于我缺少什么的任何指示?一些参考我试图使用的代码..

 ...
  results1 = $.parseJSON(JSON.stringify(results));
  results2 = JSON.stringify(results);
  var array = JSON.parse(results1);


        $.each(results1, function(i,item){  

           console.log("item-result : " + item.i); 

              $.each(item.i, function(eventID,eventData) {       

                  $.each(eventData.$id, function(eventID1,eventData1) {       

                 console.log("item-result-NumComments : " + eventData1.numComments);    
                  });

              });

            });

....

感谢您的帮助。

* UPDATE * 如何使Mongo在聚合中返回另一个字段“name”以及“$ id”和numComments?

解决方案这是使用Mongo完成的方法。 $ addToSet有助于包含更多字段。

db.records.aggregate( 
{ $match : { 'hide' : 0 } } ,   
{ $unwind : '$comments'},{$project :  { name : '$name', pic1 : '$pic1' } } , 
{ $group : {  _id : '$_id',numComments: { $sum : 1 } , name: { $addToSet : "$name" }    }},  
{ $sort : { 'numComments' : -1} } , 
{ $limit : 5 })

1 个答案:

答案 0 :(得分:0)

假设你已经解析了你的回复data,你可以这样做:

for (var i = 0; i < data.result.length; i++) {
    console.log(data.result[i]._id["$id"]);
    console.log(data.result[i].numComments);
}

如果您正在使用jQuery的AJAX,则应该已经解析了响应(假设您在调用中指定了类型)