如何使用Mongo Projections排除数组中的指定字段
MongoDB投影:排除顶层字段与数组内嵌元素字段
需求回顾
要实现两个投影操作:
- 排除文档顶层的
Date字段 - 排除
People数组中每个元素的Name字段
具体实现
1. 定义投影字段列表
按照你需要的列表形式,给要排除的字段加上-前缀(MongoDB中-表示排除该字段):
val fieldList = List("-Date", "-People.Name")
2. 转成Mongo投影文档(以Scala驱动为例)
把字符串列表转换成MongoDB能识别的投影Document:
import org.mongodb.scala.bson.Document // 将列表转换为键值对映射,排除字段对应值为0 val projectionMap = fieldList.map { field => val (key, exclude) = if (field.startsWith("-")) (field.drop(1), 0) else (field, 1) key -> exclude }.toMap val projection = Document(projectionMap)
3. 查询时应用投影
在查询语句里加上这个投影配置:
collection.find().projection(projection).collect().head()
效果验证
输入文档:
{ "Type" : "Green", "Date" : "2022-10-21", "People" : [ {"RSVP": "Yes", "Name": "Peter"}, {"RSVP": "No", "Name": "Pan"} ] }
输出结果:
{ "Type" : "Green", "People" : [ {"RSVP": "Yes"}, {"RSVP": "No"} ] }
要点说明
- 顶层字段排除直接用
-字段名,数组内嵌字段排除用-数组名.内嵌字段名的格式,MongoDB会自动处理数组内的所有元素 - 如果你用的是其他语言驱动(比如Java、Python),核心逻辑一致,只是构建投影文档的语法略有不同
内容的提问来源于stack exchange,提问作者Jackson Li
相关产品推荐
相关产品推荐

