【问题标题】:MongoDB filter documents after aggregating to count based on type of fields [duplicate]MongoDB根据字段类型聚合后过滤文档[重复]
【发布时间】:2019-11-14 09:20:30
【问题描述】:

我已经能够创建一个聚合查询来按我的数据对象的字段进行计数。

db.getCollection.aggregate([
{"$group" : {"_id": "$attr", "count": {"$sum" : 1}}},
{"$sort": {"count": -1}}
])

这导致基于{_id,count} 的文档按计数降序排序。到目前为止一切都很好。

我接下来要尝试的是filter 仅在(匹配)计数高于 N(比如 100)阈值的那些文档中。但是当我执行时:

db.getCollection.aggregate([
{"$group" : {"_id": "$attr", "count": {"$sum" : 1}}},
{"$sort": {"count": -1}},
{"$match": {"count": {$gte:["count",100]}}}
])

查询返回空结果。实现这一目标的方法是什么?我也尝试过使用$filter 而不是$match,但没有成功。

【问题讨论】:

  • 请在 jsoneditor 分享收藏
  • @MaheshBhatnagar 在我看来并不真正需要,但为了测试,假设[{"attr": "a"},{"attr": "b"},{"attr": "a"},{"attr": "c"}] 现在我的最终查询的结果(阈值2)应该类似于[{"_id": "a","count":2}].
  • {"$match": {$gte:["$count",100]}} 必须完成这项工作
  • 请注意,如果您之前确实有一些 SQL 经验,SQL to Aggregation Mapping Chart 有很多常见示例,包括“HAVING”子句,这基本上就是您要问的问题。

标签: mongodb filtering aggregate counting


【解决方案1】:

请检查您的匹配条件。使用匹配条件后的排序条件错误。

db.getCollection.aggregate([
{"$group" : {"_id": "$usage", "count": {"$sum" : 1}}},
{"$sort": {"count": -1}},
{"$match": {"count":{ $gte: 2 } }},
])

【讨论】:

  • 我觉得我必须注意这个帐户最近发布了几个答案,这些答案基本上是从现有答案中提取的。在 StackOverflow 上查找现有答案,然后将它们作为您自己的答案发布并不是这样做的。基本上由“试试这个”和没有解释的代码块组成的答案通常表现为从另一个来源获得的东西,而不是发布答案的人的直接知识。 请注意,这是我第二次发布同样的通知
  • @Neil Lunn 怎么说我从现有答案中提取了代码。
  • @Neil Lunn 你是对的,我没有演示但代码没有被复制。我正在尝试用代码演示
  • 代码很容易被复制。坦率地说,您在答案中使用的极少数单词实际上形成了一个完全错误的陈述(连同代码,其中也包含不必要的陈述)。显而易见的事实是您对问题中的代码进行了“更正”,这很容易通过在线查找现有答案来获得(尽管很明显,提出问题的人自己并没有设法找到这个),但是您对更正的解释确实与实际所做的不完全匹配。一个好的答案确实有能力解释为什么做某事。
  • 我的意思是,老实说(我真的不是为了自我宣传),但我在问题本身的评论中写的几句话(以及文档的外部链接)确实如此对接触过 SQL RDBMS 后可能尝试 MongoDB 的任何人做出更清晰的解释。我说这可能是很多人的原因。因此,确实,多年前的现有答案提供了更多信息和准确信息。没有必要改变它。如果您认为可以,欢迎您对现有问题添加您自己的详细回复。
猜你喜欢
  • 2021-10-08
  • 1970-01-01
  • 2020-10-16
  • 1970-01-01
  • 1970-01-01
  • 2016-12-19
  • 1970-01-01
  • 1970-01-01
  • 2016-06-26
相关资源
最近更新 更多