MongoDB投影。运算符$ add field | expression array awareness或$ slice之后

时间:2013-11-11 08:16:53

标签: mongodb

我的收藏品看起来像是:

[{
    "org": "A",
    "type": "simple",
    "payFor": 3,
    "price": 100
},
{
    "org": "A",
    "type": "custom",
    "payFor": 2,
    "price": 115
},
{
    "org": "B",
    "type": "simple",
    "payFor": 1,
    "price": 110
},
{
    "org": "B",
    "type": "custom",
    "payFor": 2,
    "price": 200
},
{
    "org": "B",
    "type": "custom",
    "payFor": 4,
    "price": 220
}]

并且需要用“org”生成用查询来生成组的结果,其中支付仅出现在“类型”中的第一个“payFor”价格。 我正在$slice尝试使用$add运算符的表达式结果,但这不起作用。

管道:

[{
    "$group": {
        "_id": {
            "org": "$org",
            "type": "$type"
        },
        "payFor": {
            "$max": "$payFor"
        },
        "count": {
            "$sum": 1
        },
        "prices": {
            "$push": "$price"
        }
    }
},
{
    "$group": {
        "_id": "$_id.org",
        "payments": {
            "$push": {
                "type": "$_id.type",
                "forFirst": "$payFor",
                "sum": {
                    "$cond": [
                        {
                            "$gte": [
                                "$payFor",
                                "$count"
                            ]
                        },
                        {
                            "$add": {
                                "$prices": {
                                    "$slice": "$count"
                                }
                            }
                        },
                        {
                            "$add": "$prices"
                        }
                    ]
                }
            }
        }
    }
}]

我知道可以遍历未降价的价格,只选择“payFor”计数。但是结果集合比上面的例子更丰富,这个操作会产生一些不必要的开销。

需要社区的一些建议。请。感谢。

0 个答案:

没有答案