java - Spring ReactiveMongoTemplate 使用嵌入对象查询对象
问题描述
我的模型是一个包含不同类型对象集合的对象,
class A {
String id;
String field1;
Set<B> beesInA;
}
class B {
String id;
String name;
}
我想找到一个 ID 为 idB 的 B 实例,它属于一个 id 为 idA 的 A 实例,即
选择 B 其中 A.id = idA 和 A.beesInA.id = idB
只有 A 类是document
具有相应存储库RepoA
的extends ReactiveMongoRepository<A, String>
如何使用ReactiveMongoTemplate
for编写查询RepoA
,将Mono<B>
根据上述条件返回?
同样,如何更新使用上述条件找到的 B 实例?
解决方案
感谢Oliver Drotbohm的回答,我能够得到我需要的结果
Query query = Query.query(Criteria.where("id").is("idA").and("beesInA.id").is("idB"));
query.fields().include("beesInA.$");
template.findOne(query, A.class).flatMapIterable(A::getBeesInA).single();
B的特定实例的更新非常相似
Query query = Query.query(Criteria.where("id").is("idA").and("beesInA.id").is("idB"));
Update update = new Update().set("beesInA.$", updatedBObject);
template.findAndModify(query,
update,
new FindAndModifyOptions().returnNew(true),
A.class)
.flatMapIterable(A::getBeesInA)
.filter(b -> b.getId().equalsIgnoreCase("idB")
.single();
这篇文章ReactiveMongoTemplate
包含有关使用with的完整信息ReactiveMongoRepository
推荐阅读
- javascript - 隐藏论坛中的链接,直到用户发表评论
- python - 单击 html 按钮时调用 Django 函数
- django - Solr 返回更多值
- angular - 如何在不从我的服务传递属性“类型”的情况下使用带有元数据的效果?
- docker - 通过 ssh 运行 Ubuntu 容器时如何在 Windows 10 上打开 GUI
- node.js - 在 AWS 中使用 Node js 做出反应。React 和 Node 问题之间的连接
- c# - 创建 ef6 dbcontext 构造函数类
- node.js - VS 代码没有给出 npm 包方法推荐
- c - 哪些 C 版本允许您在 for 循环中声明变量?
- angular - Angular Firestore - 异步管道返回空数据