【问题标题】:ReactiveMongoRepository / MongoRepository does not return _id fieldReactiveMongoRepository / MongoRepository 不返回 _id 字段
【发布时间】:2018-06-18 21:06:04
【问题描述】:

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

扩展 BasicDBObject 是我发现的最佳方式。

保存 SigMfMetaDocument 时返回的单声道不包含 _id 字段。

  1. 我不明白为什么 save 方法不返回一个用 _id 和 _id 包装 SigMfDocument 的 Mono

  2. 如果有更好的方法来为 ReactiveMongoRepository 创建一个可以动态接受任何字段的类型,我很乐意。

@Document(collection = "sigmfmeta")

class SigMfMetaDocument : BasicDBObject {

@Id
@JsonProperty("id")
val id: String? = UUID.randomUUID().toString()

constructor(map: Map<String, Any>) : super(map)

constructor() : super()

constructor(key: String, value: Object): super()
}

@Repository interface SigMfMetaRepository : ReactiveMongoRepository<SigMfMetaDocument, String>

【问题讨论】:

  • 我不是 mongo repos 方面的专家,但我的猜测是,多个构造函数在某种程度上把事情搞砸了。大多数示例使用简单的@Document data class Person(val id: String, val name: String) 或类似名称。也许首先尝试一下,如果可行,然后尝试逐步找出问题所在。
  • 感谢@Lovis 的回复!

标签: mongodb kotlin


【解决方案1】:

所以我为我的用例找到了解决这个问题的方法。我最初假设保存方法的文档中的描述将适用 (保存给定的实体。使用返回的实例进行进一步的操作,因为保存操作可能已经完全改变了实体实例)。

我认为 Mongo 自动插入 _id 值将适用于此描述。

我将模型更改为:

@Document(collection = "sigmfmeta")
class SigMfMetaDocument : BasicBSONObject {

    constructor(map: Map<String, Any>) : super(map) {
        val id = ObjectId()
        this.put("_id", id)
    }

    constructor() : super()
}

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-04
    • 2015-04-16
    • 2015-03-06
    • 2022-09-23
    • 1970-01-01
    • 2021-11-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多