You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 17:15:06