使用Count,DISTINCT&编写mongodb查询以下方案的

时间:2018-03-18 15:25:24

标签: mysql mongodb aggregation-framework

mysql:

SELECT COUNT(DISTINCT col1, col2) AS 'aggCol1',
SUM(col3 = "2016-03-04 00:00:00" AND col5 = 29) AS 'aggCol2' 
FROM table1 
WHERE col4 = 50;

我想在MongoDB上编写查询。

1 个答案:

答案 0 :(得分:1)

您可以使用聚合框架:

要按col4进行过滤,您应该使用$match

要将您的收藏集转换为单个结果,您需要$group _id设置为null

要为col1col2获取不同的值,您可以使用$addToSet

要对col3col5使用嵌套过滤,您需要$filter

要获得数组长度,您可以使用$size

因此整个聚合应如下所示:

db.col.aggregate([
    {
        $match: { col4: 50 }
    },
    {
        $group: {
            _id: null,
            c12: { $addToSet: { col1: "$col1", col2: "$col2" } },
            c3: { $push: { col3: "$col3", col5: "$col5" } }
        }
    },
    {
       $project: {
            c12: 1,
            c3: {
               $filter: {
                  input: "$c3",
                  as: "item",
                  cond: { $and: [
                    { $eq: [ "$$item.col3", ISODate("2016-03-04") ] },
                    { $eq: [ "$$item.col5", 29 ] }
                  ] }
                }
            }
        }
    },
    {
        $project: {
            aggCol1: { $size: "$c12" },
            aggCol2: { $size: "$c3" }
        }
    }
])