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

如何在MongoDB中使用投影获取内部数据且不返回对象名

如何在Scala的MongoDB查询中直接获取嵌套的data对象内部数据(无需聚合)

我的MongoDB文档结构如下:

{ "data" : {
 "key1" : "value1",
 "key2" : "value2",
 "key10" : "value10"
} }

用Json.obj("data" -> 1)做投影查询时,结果仍带着外层的data对象,但我想直接拿到内部的键值对集合,不想用聚合操作,也不想逐个指定内部字段。


方案1:查询后在Scala代码里直接提取

这是最直接且兼容性好的方式,拿到查询结果后,从返回的JSON对象中取出data字段的值就行。
假设你用的是Play JSON(从代码里的Json.obj判断大概率是),可以这么写:

// queryResult是查询返回的JsValue
val innerData = (queryResult \ "data").getOrElse(Json.obj())

这样innerData就是你要的、直接包含key1到key10的JSON对象。

方案2:用MongoDB投影语法展开嵌套字段

如果想在数据库层面完成这个操作,可以尝试用通配符投影:

Json.obj("data.$" -> 1)

注意:这种写法在部分MongoDB驱动版本中可以直接把data下的所有子字段提升到顶层,但如果data是数组的话只会匹配第一个元素,不过你的场景里data是对象,这个写法适用。不过相比代码层面的提取,这种方式的兼容性可能略差,建议优先用方案1。


内容的提问来源于stack exchange,提问作者Saurabh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 18:52:41