我正在寻找使用Spring Data提供的API对Mongo集合实施 upsert 操作的正确方法。
详细地,我有以下用例。集合的架构collection
如下所示:
{
_id: "some_id",
field1: "value1",
field2: "value2",
subdocument1: {
// A subdocument with some fields
},
subdocument2: {
// A subdocument with some other fields
}
}
字段field1
和field2
总是存在的,但subdocument1
并subdocument2
会在不同的时刻被插入:一个第一插入期间,第二与随后的更新。
我看到MongoTemplate
有和upsert方法。使用这种方法,我必须构建自己的更新操作。
Query query = Query.query(Criteria.where("_id").is("some_id"));
Update.update("_id", "some_id")
.set("field1", "value1")
.set("field2", "value2")
.set("subdocument1", subdocumentObject);
mongoTemplate.upsert(query, update, Collection.class);
我不知道这是我在寻找什么,还有没有更好的方法。
我相信你正在寻找的是$setOnInsert
对subdocument1
。所以类似的东西应该为您工作。
Query query = Query.query(Criteria.where("_id").is("some_id"));
Update update = Update.update("_id", "some_id")
.set("field1", "value1")
.set("field2", "value2")
.set("subdocument2", subdocumentObject2)
.setOnInsert("subdocument1", subdocumentObject1);
此处更多https://docs.mongodb.com/manual/reference/operator/update/setOnInsert/
这是我使用的代码 我试图添加一行“Lock Lock=new ReentrantLock();”但是asm抛出了一个错误 异常在线程"main"java.lang.IllegalArgumentException:值类java.util.concurrent.locks.在org.objectweb.asm.ClassWriter. a(未知来源)
3.6 ABP领域层 - 领域事件 在C#中,一个类可以定义其专属的事件并且其它类可以注册该事件并监听,当事件被触发时可以获得事件通知。这对于对于桌面应用程序或独立的Windows Service来说非常有用。但是, 对于Web应用程序来说会有点问题,因为对象是根据请求(request)被创建并且它们的生命周期都很短暂。我们很难注册其它类别的事件。同样地,直接注册其它类别的事件也造成了类之间的耦合
3.4 ABP领域层 - 领域服务 3.4.1 简介 领域服务(或者服务,在DDD模式中)是被用来执行领域操作或者业务规则的。Eric Evans 在他的DDD书中这样说过:一个好的Service应该有以下三个特征: 与领域概念相关的操作不是Entity或Value Object 的一个自然部分; 接口是根据领域模型的其它元素定义的; 操作是无状态的。 领域服务和Application Servi
钥匙斗篷中有2个领域:主人和自定义。两个都有admin用户。 自定义领域管理添加新用户new_admin并通过管理控制台为其分配角色admin。
DDD DSL DSL(domain-specific languages)即领域特定语言,唯一能够确定DSL边界的方法是考虑“一门语言的一种特定用法”和“该语言的设计者或使用者的意图。在试图设计一个DSL的时候,发现了一些有意思的简单的示例。 DSL示例 jQuery 最流行的DSL jQuery是一个Internal DSL的典型的例子。它是在一门现成语言内实现针对领域问题的描述。 $('.m