Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/243.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于解析mongodb聚合返回的JSON的JavaScript_Javascript_Php_Mongodb - Fatal编程技术网

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

用于解析mongodb聚合返回的JSON的JavaScript,javascript,php,mongodb,Javascript,Php,Mongodb,我不确定是否已经有一个类似的问题,但我不能找到它,而现在搜索一段时间。我使用的PHP Mongodb聚合返回json,如下所示 {"result":[{"_id":{"$id":"52fe557edf80a7a916b68612"},"numComments":3},{"_id": {"$id":"52dbabb34d4a130c43e6d12c"},"numComments":1}],"ok":1} 这是我正在使用的聚合 $result = $collection->aggreg

我不确定是否已经有一个类似的问题,但我不能找到它,而现在搜索一段时间。我使用的PHP Mongodb聚合返回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值。我试着通过几美元循环它们。每一个,但我总是得到它们作为未定义的,我猜我很接近,但还不能破解

对我遗漏的东西有什么指点吗?对我试图使用的代码的一些引用

 ...
  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);    
                  });

              });

            });

....
谢谢你的帮助

*更新*如何使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 })

假设您已解析响应
数据
,您可以执行以下操作:

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

如果您使用的是jQuery的AJAX,那么应该已经对响应进行了解析(假设您在调用中指定了类型)

效果很好。谢谢但是,我们必须这样做吗?它在处理解析结果时是否有任何性能影响?@Param——这是最简单的方法,您的响应是一个包含对象数组的对象,因此
for
循环是一种方法。不应该有任何性能影响。谢谢你,tymeJV。如何让Mongo在返回$id和numComments的同时再返回一个字段“name”?不确定,仍在学习Mongo,可能需要问另一个问题。我现在修改了我的问题。我从tymeJV那里得到了我先前问题的答案。谢谢如何在$id中包含另一个DB字段“name”?我找到了mongodb聚合解决方案,在这里更新了我的问题。它可能会对在这里寻找它的人有所帮助。