以下是一个简单的pojo:

public class Description {
    private String code;
    private String name;
    private String norwegian;
    private String english;
}

请参阅以下代码,通过spring MongoTemplate将upsert应用于MongoDb:

Query query = new Query(Criteria.where("code").is(description.getCode()));
Update update = new Update().set("name", description.getName()).set("norwegian", description.getNorwegian()).set("english", description.getEnglish());
mongoTemplate.upsert(query, update, "descriptions");

生成Update对象的行手动指定Item类的每个字段.

但如果我的Item个对象发生了变化,那么我的Dao层就会断开.

那么,有没有办法避免这样做,以便我的Item类中的所有字段都自动应用于更新?

例如.

Update update = new Update().fromObject(item);

请注意,我的pojo没有扩展到DBObject.

推荐答案

我遇到了同样的问题.在当前的Spring Data MongoDB版本中,没有这样的东西可用.你必须手动更新单独的字段.

然而,有了另一个框架:Morphia,这是可能的.

这个框架有一个DAO功能的包装器:https://github.com/mongodb/morphia/wiki/DAOSupport

可以使用DAO API执行以下操作:

SomePojo pojo = daoInstance.findOne("some-field", "some-value");
pojo.setAProperty("changing this property");
daoInstance.save(pojo);

Mongodb相关问答推荐

如何在MongoDB中通过限制和跳过查找项进行匹配

没有文档的MongoDB集合中的不一致,但当我执行count()时,它告诉我有15个文档

为什么这个查询可以在MongoDB中使用?

随着时间的推移在 mongodb 中获得

如何在 go mongo-driver 中为 options.FindOne() 设置限制

如何将以下聚合查询转换为 bson 并在 golang 中执行

Raft Vs MongoDB 初选

在 MongoDB 中打开连接的 SocketTimeout

MongoDB C# 驱动程序 - 如何将 _id 存储为 ObjectId 但映射到字符串 Id 属性?

MongoDB 2.1 聚合框架总和匹配名称的数组元素

在 MongoDB 中创建简短、唯一的对象 ID

使用 mgo 存储嵌套 struct

MongoDB插入引发重复键错误

如何使用sailsjs v0.10连接mongodb?

在 URL 中使用 ID(来自 mongo 的 ObjectId)是否安全?

如果我在 MongoDB 上使用 LINQ,为什么会失go 性能?

如何在 NoSql 数据库(MongoDB)中强制执行外键?

查找聚合性能差

开发人员必须采取哪些mental steps才能开始从 SQL 迁移到 NOSQL(CouchDB、Fathom DB、MongoDB 等)?

MongoDB - $set 更新或推送数组元素