0

我的收藏看起来像:

[{
    "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”执行分组,其中付款仅出现在“type”中的第一个“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”数量。但是结果集合比上面的例子更丰富,这个操作会产生一些不必要的开销。

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

4

0 回答 0