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

如何在MongoDB中查询评分高于12的餐厅

MongoDB 查询:筛选评分高于12的餐厅数据

嘿,我来帮你搞定这个MongoDB查询问题。要筛选出评分(grades)高于12的餐厅,得先考虑grades字段的结构——通常它是一个数组(毕竟餐厅可能有多次评分记录),所以分两种常见场景来给你说明:

场景1:只要餐厅存在至少一条高于12的评分就返回整个餐厅数据

这种情况很直接,我们只需要匹配数组中存在满足score > 12的元素即可。有两种写法,效果一致:

写法1:直接数组字段查询

db.restaurants.find({
  "grades.score": { $gt: 12 }
})

写法2:使用$elemMatch(更适合多条件匹配场景)

如果之后你需要给评分加更多筛选条件(比如同时匹配评分日期),$elemMatch会更清晰:

db.restaurants.find({
  grades: { $elemMatch: { score: { $gt: 12 } } }
})

这两种写法都会返回所有包含至少一条评分>12的餐厅,并且会保留餐厅的所有原始数据(包括低于12的评分条目)。

场景2:返回餐厅数据的同时,只保留评分高于12的条目

如果你不仅想筛选餐厅,还想过滤掉结果里低于12的评分,就需要用到投影(projection)结合$filter操作符:

db.restaurants.find(
  // 第一步:筛选出有符合条件评分的餐厅
  { "grades.score": { $gt: 12 } },
  // 第二步:只保留需要的字段,同时过滤grades数组
  {
    name: 1,       // 按需保留餐厅名称,可替换成你需要的其他字段
    address: 1,
    grades: {
      $filter: {
        input: "$grades",
        as: "grade",
        cond: { $gt: ["$$grade.score", 12] }
      }
    }
  }
)

这个查询会返回符合条件的餐厅,并且grades数组里只会留下评分>12的条目,其他不符合的会被剔除。

特殊情况:grades是单个对象而非数组

如果你的grades字段不是数组,只是一个单独的评分对象(比如每个餐厅只有一条评分记录),那查询就更简单了,直接用:

db.restaurants.find({ "grades.score": { $gt: 12 } })

如果还有其他特殊需求,比如需要统计符合条件的餐厅数量,或者结合其他字段筛选,随时提出来就行!

内容的提问来源于stack exchange,提问作者Long Tran Hoang

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 21:17:42