arrays - Spring data mongodb聚合过滤器列表
问题描述
我按照这个问题中的示例在spring中创建过滤器聚合以在 spring 数据 mongodb 上的聚合中创建过滤器。在示例中,过滤器按valueOf和equalToValue搜索以创建 $eq。如何创建一个 $in 并传递一个列表?
这是我的代码:
ProjectionOperation p2 = project()
.andExpression("name").as("name")
.andExpression("version._id").as("version._id")
.andExpression("version.version").as("version.version")
.and(filter("version.cat")
.as("cat")
.by(valueOf("cat._id")
.equalToValue(new ObjectId("5de99f42f15273c92d1228e8"))))
.as("version.cat");
我正在寻找这样的东西:
**ProjectionOperation p2 = project()
.andExpression("name").as("name")
.andExpression("version._id").as("version._id")
.andExpression("version.version").as("version.version")
.and(filter("version.cat")
.as("cat")
.by(new Criteria("cat")
.in(Arrays.asList(
new ObjectId("5de99f42f15273c92d1228f7"),
new ObjectId("5de99f42f15273c92d1228f9"))
)
.getCriteriaObject()
)).as("version.cat"));
谢谢您的回答。
解决方案
我可以用ArrayOperators解决这个问题:
ProjectionOperation p2 = project()
.andExpression("name").as("name")
.andExpression("version._id").as("version._id")
.andExpression("version.version").as("version.version")
.and(filter("version.cat")
.as("cat")
.by(
ArrayOperators.In
.arrayOf(Arrays.asList(
new ObjectId("5de99f42f15273c92d1251853"),
new ObjectId("5de99f42f15273c92d1251854"),
)
).containsValue("$$cat._id")))
.as("version.cat");
在 arrayOf 中,我传递了要与每个 objectId 的值进行比较的列表。我认为,过滤器会生成某种“for”类来获取 cat 列表的每个值。
推荐阅读
- python - 如何将单词列表变成字符串列表?
- python - Python列表仅附加字典
- javascript - ReactJS:在字符串中查找 html 标签并检查它们是否包含在反引号中
- php - PHP SOAP 添加信封请求
- markdown - 如何在 Markdown 中使用 $?
- sql - 以用户指定的顺序存储数据
- javascript - 更改 Magnify.js 的镜头位置
- csv - BigQuery EXPORT sql 正在分片小查询结果
- xamarin - 该应用程序已在 Xamarin 中终止 iOS
- html - 为什么绝对定位的孩子和具有 1px 边框的父母之间存在差距