mongo db查询与分组依据和位置

时间:2018-10-22 18:19:33

标签: sql mongodb mongodb-query

我需要将此SQL查询转换为mongo数据库查询:

select * from ( 
select x, count(*) as CNT_T from table 
group by 1 ) aa where aa.Total = aa.CNT_T;

我可以按以下方式进行分组,但在进行分组后我不知道如何将aa.CNT_T与aa.Total匹配。

db.test.aggregate( [
   { $group: { _id: { x: "$x" },
               count: { $sum: 1 } } }
])

谢谢..

2 个答案:

答案 0 :(得分:0)

您所缺少的只是match元素

db.test.aggregate( [
  { $group: { _id: { x: "$x" }, count: { $sum: 1 } } },
  { $match: { count: { $eq: 1 } } }
])

答案 1 :(得分:0)

您的SQL查询对我来说似乎并不完整,因为内部Total返回的列列表中似乎缺少SELECT字段。另外,还没有完成GROUP,所以我不确定您到底想在这里做什么。

但是,使用MongoDB v3.6及更高版本,您可以使用$expr做类似的事情,它允许您比较同一文档中的多个字段:

db.test.aggregate([{
    $group: {
        _id: "$x",
        docs: { $push: "$$ROOT" }
        count: { $sum: 1 }
    }
}, {
    $unwind: "$docs" // flatten the result array
}, {
    $match: {
        $expr: { $eq: ["$total", "$count"] } // apply the filter that you're after
    }
}])