mongodb - 如何用父文档展平动态字段 - Spring data Mongo DB
问题描述
在我的 Spring Boot 项目中有一个这样的文档:
@Document(collection="AuditTable")
public class AuditTable {
@Id
private String id;
private Map<String, String> properties;
其中 properties 是一个动态字段,即它可以接收尽可能多的不同键值对。
我使用 MongoRepository 来存储这个值:
@Repository
public interface AuditTableRepo extends MongoRepository<AuditTable, String> {
}
现在,当我将它存储在 Collection 中时,它看起来像这样:
而我希望它看起来像这样:
"_id": "XYZ"
"_class": "XYZ"
"workCaseId":"12"
"taskName":"AUDIT"
"owner":"ANSHU"
"createdDate":"XYZ"
关于如何在不使用转换器的情况下解决此问题的任何想法?或者,如果我必须使用它们,我应该怎么做?
我是 spring data mongodb 的新手,因为我们最近从 Oracle 跳转到了 mongo。
解决方案
如果您使用的是最新的 mongo 版本,那么您可以使用$replaceRoot和$mergeObjects(来自stackoverflow 答案的参考)
let pipeline = [
{
"$replaceRoot":{
"newRoot":{
"$mergeObjects":[
{
"id":"$id"
},
"$properties"
]
}
}
}
]
db.collection.aggregate(pipeline)
推荐阅读
- laravel - Laravel 跨域读取阻塞 (CORB) 阻止了跨域响应
MIME 类型 text/html - windows - 如何使用 .bat 文件智能切换电源方案?
- react-native - 使用 Flex 时图像消失
- azure - 不使用 NAT 入站规则/端口的 SSH 访问 Linux VMSS
- intellij-idea - 在 intellij 中,它打印了很好的类路径,但我只在类路径上看到类目录?
- swiftui - SwiftUI - 适合多行文本宽度的内联样式文本背景颜色 SwiftUI
- websocket - 如何衡量应用程序中 websocket 的可扩展性
- svelte - 通过 api svelte 更新存储数据后如何重新渲染组件?
- matlab - 在 MATLAB 中保存连接的图像
- sql - Postgres LATERAL 查询的正确性和效率