我不确定是否已经提出了类似的问题,但我现在无法在搜索时找到它。我正在使用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 })
答案 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,则应该已经解析了响应(假设您在调用中指定了类型)