Mongodb Groupby聚合和加法查询在一起

时间:2015-03-03 06:41:27

标签: php mongodb aggregation-framework

我正在推进我之前的问题MongoDB GroupBy

使用聚合函数后,我得到我想要的,现在我想向该聚合函数添加一些查询参数,并且查询应该应用于聚合的结果 即例如对于entity_id“123”,有4年val

“2010”, “2011”, “2012”, “2013”​​

在应用聚合函数后,按照上一个问题得到“2013”​​,实体ID为“123”,这是绝对正确的。

现在我想添加额外的查询,它应该像 - “entity_id”123“AND year”2013“AND”extra_query“。

我尝试使用$ match,但它将其作为“entity_id”123和额外查询。

我的数据库中有2个收藏

收集1。

{
"entity_id":123,
"added_by":"a",
},
{
"entity_id":321,
"added_by":"b",
},

和集合2

{
"entity_id":123,
"year":"2014",
"profit_val":2000,
},
{
"entity_id":123,
"year":"2013",
"profit_val":1000,
},
{
"entity_id":123,
"year":"2012",
"profit_val":500,
},
{
"entity_id":123,
"year":"2011",
"profit_val":100000,
},

所以当我搜索“profit_val”> 10000,我得到的结果为“entity_id”= 123,但是这个结果是错误的,因为我想只看实体的最大年份这个条件。 我想按照最大年份进行分组,我已经做了,现在给出答案,我现在只想在这个“分组”结果中添加查询。

我希望这会让你明白我在寻找什么。

1 个答案:

答案 0 :(得分:1)

我从这个问题中理解的是你想要这样的东西。

> db.collection2.aggregate([
    {
        $sort: {
            "year": 1
        }
    },
    {
        $group: {
            _id: "$entity_id",
            year: {
                $max: "$year"
            },
            profit_val: {
                $last: "$profit_val"
            }
        }
    },
    {
        $match: {
            "profit_val": {
                "$gt": 10000
            }
        }
    }
])