我需要将此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 } } }
])
谢谢..
答案 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
}
}])