从MySQL到Mongoose:聚合文档,在所有行中最大乘以两个值

时间:2018-11-10 19:32:20

标签: mongodb mongoose mongodb-query

对于给定的表:

id | val_a | val_b | mult | category
------------------------------------
 0 | 1     | 2     | 9    | A
 1 | 0     | 3     | 5    | B
 2 | 0.5   | 4     | 6    | C

在MySQL中进行以下查询

SELECT * FROM table WHERE category IN ('A','B','C') 
AND IF( val_a > 0, val_a, val_b ) * mult = (SELECT MAX( IF( val_a > 0, val_a, val_b ) * mult ) FROM table WHERE category IN ('A','B','C')) LIMIT 1;

将为每一行找到 val_a *多倍的乘法(如果val_a == 0: val_b *多倍

0) 1*9 = 9
1) 3*5 = 15
2) 0.5*4 = 2

然后找到所有答案的最大值,最后返回ID:1的行

1) 15

如何在猫鼬中汇总相同内容?即使是部分答案也将有助于前进和学习。 尝试从http://www.querymongo.com/开始,但没有成功。

1 个答案:

答案 0 :(得分:1)

您可以将$match$in配合使用以应用过滤条件,然后将$multiply$cond配合使用以根据您的公式计算值。最后,您可以将$sort$limit相加以获得MAX值。试试:

db.col.aggregate([
    {
        $match: {
            category: { $in: [ "A", "B", "C" ] }
        }
    },
    {
        $project: {
            _id: 1,
            value: {
                $multiply: [ { $cond: [ { $ne: [ "$val_a", 0 ] }, "$val_a", "$val_b" ] }, "$mult" ]
            }
        }
    },
    {
        $sort: { value: -1 }
    },
    {
        $limit: 1
    }
])

输出:

{ "_id" : 1, "value" : 15 }