【发布时间】:2019-01-16 10:24:40
【问题描述】:
我正在尝试使用 spring-data 将我们当前对 POJO 的使用替换为 mongodb 到 Document,在这种特殊情况下,而不是使用字段作为我使用某些字段的实体的 Id。
例如,如果我有这个 pojo:
class Thing {
public String firstName;
public String lastName;
public Int age;
}
目前要将其保存到 mongodb,我首先将其转换为 Document:
Document doc = new Document();
doc.append("firstName", thing.firstName);
doc.append("lastName", thing.lastName);
doc.append("age", thing.age);
然后我创建一个查询:
BasicDBObject query = new BasicDBObject(
and(
new BasicDBObject("firstName", thing.firstName),
new BasicDBObject("lastName", thing.lastName))
然后我使用 mongodb 驱动程序更新文档。
collection.updateOne(query, document, UpdateOptions().upsert(true))
这样我只更新了age,不需要担心对我没有意义的ObjectId。
现在我想将其更改为 spring-data-mongodb,以便在编写文档转换部分时更不容易出错并且更有效率。但是我找不到如何用 spring-data-mongodb 做类似的事情,MongoRepository api 中的保存是 ObjectId 的基础,我找不到任何注释或 bean 来覆盖/创建让我做这样的事情。
在一个完美的世界里,我会有一个类似于 spring-data-mongodb 的复合键。因此,例如,我将不得不以这种方式编写我的 POJO:
class Thing {
@Id public String firstName;
@Id public String lastName;
public Int age;
}
或者(不是更好的情况,但也许可以接受)
class ThingKey {
public String firstName;
public String lastName;
}
class Thing {
@Id public ThingKey thingKey;
public Int age;
}
并且保存将能够确定这是对现有实体的更新并采取行动。
PS:这里的 POJO 是帮助理解问题的简化版本,并不是我使用的最终版本。
【问题讨论】:
标签: java spring mongodb spring-data-mongodb