Mongodb统计1999年后上映电影数量的查询写法报错求解决
MongoDB查询统计1999年后上映电影数量问题解答
现有写法问题汇总
db.movies.find({"year":{"$gt":"total"("1999")}}).count():存在语法错误,"total"("1999")是非法表达式,MongoDB不支持字符串直接加括号的调用写法,比较值无需额外包裹无意义的自定义标识。db.movies.aggregate([{"$group":{"_id":"$year","count":{"$gt":"$1999"}}}]):聚合逻辑错误,$group阶段的字段统计不能直接使用$gt比较运算符,$gt仅用于条件判断,不能作为聚合累加规则,同时$1999是不存在的字段引用,完全不符合语法要求。db.movies.count( {"year": { "$gt": "moviecount"("1999") } } ):存在语法错误,"moviecount"("1999")是非法调用结构,属于无意义的自定义字符串拼接,不符合查询条件的书写规范。db.movies.find({"year":{"$gt":"1999"}}):首先存在类型匹配风险,如果year字段为数字存储类型,和字符串"1999"比较会直接导致查询失效;其次该语句仅返回符合条件的文档游标,没有执行计数逻辑,无法得到统计结果。db.movies.aggregate([{"$group":{"_id":"$year","count":{"$gt":"1999"}}}]):和第二种聚合写法问题完全一致,错误在$group阶段使用条件运算符做统计,且没有提前过滤符合年份要求的文档。
正确查询语句
写法1:使用countDocuments(官方推荐,性能最优)
如果year字段为常规数字存储类型,语句如下:
docs = db.movies.countDocuments({ "year": { "$gt": 1999 } })
如果确认year字段为字符串存储类型,调整为:
docs = db.movies.countDocuments({ "year": { "$gt": "1999" } })
写法2:使用聚合框架实现
docs = db.movies.aggregate([ // 先过滤出1999年之后的电影,降低后续计算开销 { "$match": { "year": { "$gt": 1999 } } }, // 统计符合条件的文档总数量 { "$group": { "_id": null, "total": { "$sum": 1 } } } ])
内容的提问来源于stack exchange,提问作者Davi ExMach
相关产品推荐
相关产品推荐

