Mongodb ReactiveMongoRepository/MongoRepository不返回\u id字段

Mongodb ReactiveMongoRepository/MongoRepository不返回\u id字段,mongodb,kotlin,Mongodb,Kotlin,我认为这个问题可能与我的Mongo文档Koltin数据类有关,但是对于我们的业务案例,我们需要允许用户添加任何JSON字段来描述他们的RF数据集 扩展BasicDBObject是我找到的最好的方法 保存SigMfMetaDocument时返回的mono不包含_id字段 我不明白为什么save方法不返回一个包含和_id的sigmf文档的Mono 如果有更好的方法为ReactiveMongoRepository创建一个可以动态接受任何字段的类型,我洗耳恭听 @Document(collection=

我认为这个问题可能与我的Mongo文档Koltin数据类有关,但是对于我们的业务案例,我们需要允许用户添加任何JSON字段来描述他们的RF数据集

扩展BasicDBObject是我找到的最好的方法

保存SigMfMetaDocument时返回的mono不包含_id字段

  • 我不明白为什么save方法不返回一个包含和_id的sigmf文档的Mono

  • 如果有更好的方法为ReactiveMongoRepository创建一个可以动态接受任何字段的类型,我洗耳恭听

  • @Document(collection=“sigmfmeta”)

    类SIGMFTMetaDocument:BasicDBObject{
    @身份证
    @JsonProperty(“id”)
    val id:String?=UUID.randomUUID().toString()
    构造函数(映射:映射):超级(映射)
    构造函数():super()
    构造函数(键:字符串,值:对象):super()
    }
    
    @存储库
    
    接口SigMfMetaRepository:ReactiveMongoRepository

    ,因此我找到了一种解决我的用例的方法。我最初假设文档中对save方法的描述适用 (保存给定实体。使用返回的实例进行进一步操作,因为保存操作可能已完全更改实体实例)

    我认为Mongo自动插入
    \u id
    值将适用于此描述

    我将模型更改为:

    @Document(collection = "sigmfmeta")
    class SigMfMetaDocument : BasicBSONObject {
    
        constructor(map: Map<String, Any>) : super(map) {
            val id = ObjectId()
            this.put("_id", id)
        }
    
        constructor() : super()
    }
    
    @文档(collection=“sigmfmeta”)
    类SIGMFTMetaDocument:BasicBonObject{
    构造函数(映射:映射):超级(映射){
    val id=ObjectId()
    这个。put(“\u id”,id)
    }
    构造函数():super()
    }
    

    这样,在保存某些业务逻辑后,我就有了_id值。我再次以这种方式定义了我的模型,因为我们正在接受的元数据文件需要允许客户添加他们希望描述射频测量数据二进制文件的任何字段。

    我不是mongo repos的专家,但我猜,多个构造函数不知怎的把事情搞砸了。大多数示例使用简单的
    @文档数据类Person(val-id:String,val-name:String)
    或类似类型。也许先试试,如果行得通的话,然后试着逐步找出问题所在。谢谢你的回复@Lovis!
    @Document(collection = "sigmfmeta")
    class SigMfMetaDocument : BasicBSONObject {
    
        constructor(map: Map<String, Any>) : super(map) {
            val id = ObjectId()
            this.put("_id", id)
        }
    
        constructor() : super()
    }