简体   繁体   English

php MongoDb聚合函数问题

[英]MongoDb Aggregate function issue with php

I am new to mongoDb and facing issue in using aggregate function. 我是mongoDb的新手,在使用聚合函数时遇到问题。 I am trying to get sum of the fields "expectations" and "overall" but it returns 0. I also want to take the total count of the comments which are not empty or null in the same query. 我正在尝试获取字段“期望”和“总体”的总和,但它返回0。我还想获取在同一查询中不为空或为null的注释的总数。

$out = $collection->aggregate
(
    array(          
        array( '$match' => array( 'id' => 6200 )),
            array ('$unwind' => '$reviews'),
                array( '$group' => array( '_id' => '$id',
                    'exptotal' => array( '$sum' => array('reviews' => '$expectations') ),                   
                    'total' => array( '$sum' => array('reviews' => '$overall' ) ),                  
                    'count' => array( '$sum' => 1 )
                    )
            )
        )

);  

Here is the json 这是json

{
"_id": "528c62406a542f7c6a6bf522",
"id": 6200,
"categories": [
    {
        "id": 6,
        "name": "Artificial Intelligence"
    },
    {
        "id": 5,
        "name": "Statistics and Data Analysis"
    }
],
"courseId": "COURSE_16",
"institute": {
    "id": 5693,
    "name": "YZ University"
},
"instructors": [
    "  A Morris"
],
"language": "en",
"reviews": [
    {
        "username": "kalis",
        "expectations": 3,
        "content": 2,
        "overall": 3,
        "comments": "This is really good course for improvement",
        "datecreated": "2013-11-02T17:04:11.102Z"
    },
    {
        "username": "julia",
        "expectations": 4,
        "content": 2,
        "overall": 2,
        "comments": "This improves my skill a lot",
        "datecreated": "2013-11-03T17:04:11.102Z"
    },
    {
        "username": "john",
        "expectations": 2,
        "content": 4,
        "overall": 4,
        "comments": "",
        "datecreated": "2013-11-04T17:04:11.102Z"
    }
],
"shortName": "ml",
"title": "Machine Learning"

} }

This looks like it would work: 看起来像这样:

$out = $collection->aggregate(array(
    array('$match' => array( 'id' => 6200 )),
    array ('$unwind' => '$reviews'),
    array('$unwind' => '$comments'),
    array( '$group' => array( '_id' => '$id',
        'commTotal' => array('$sum' => array('$cond'=>array(array('$eq'=>array('$comments',null),0,1)))),
        'exptotal' => array( '$sum' => '$reviews.expectations'),
        'total' => array( '$sum' => '$reviews.overall' ),
        'count' => array( '$sum' => 1 )
    ))
));

The reason is that when you $unwind the data is still in its subdocument field it is just that the subdocument has become an object of a single review. 原因是,当您$unwind数据仍在其子文档字段中时,只是该子文档已成为单个审阅的对象。

The documentation is a little misleading on this operator I'll give you that. 该文档对该操作符有些误导,我给你。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM