java - spring mongo 聚合过滤器
问题描述
我正在使用 spring 在 mongodb 上运行协议查询。我会为我的投影添加一些过滤器。所以我想用spring写流程代码
db.mycollection.aggregate( [
{$match: {"_id" : { "$binary" : "sU7XGDnFYz53KHVhP+sZlQ==", "$type" : "03" } }},
{$project: {
myarray: {
$filter: {
input: "$myarray",
as: "item",
cond: { $in: [ "$$item._id", ["JshGyMImCsSceiPqqCCinlAtTrIkwvlx", "0000022211"] ] }
}
},
"colomn" :1,
myarray2: {
$filter: {
input: "$myarray2",
as: "item",
cond: { $in: [ "$$item.name", ["name1", "name2"] ] }
}
}
}
}
] );
我尝试用 Spring Mongo 写作
/*<arrayname,list ids>*/
Map<String, List<Object>> arraysAggregationMap = new HashMap<>();
...
ProjectionOperation projectionOperation = project();
//adding projections
for (String f: fields) {
projectionOperation = projectionOperation.and(f).as(f);
}
// filters
for (Entry<String, List<Object>> entry: arraysAggregationMap.entrySet()
) {
projectionOperation = projectionOperation.and(filter(entry.getKey()).as("item").by(
in("item"+"._id",entry.getValue()).toString())).as(entry.getKey());
}
Aggregation aggregation;
if(fields.size()>0 ||arraysAggregationMap.size() >0) aggregation = newAggregation(match(creteria),projectionOperation);
else aggregation = newAggregation(match(creteria));
AggregationResults results = mongoOperation.aggregate(aggregation,entityClass,Document.class);
但是$filter
工作方式不一样。
解决方案
推荐阅读
- ios - 线程 1:EXC_BAD_ACCESS(代码=1,地址=0x48)
- java - 缩短命令行的类路径 (-cp)
- java - 如何从 jar 文件中预定义方法调用?
- c# - 列表中有多个相同的项目
- google-cloud-platform - 已安装的包在 Google Cloud VMS 实例上消失
- java - 在Java中以相反的顺序对ArrayList进行排序
- c# - 带有 MVC 数据库的 ASP.NET MVC 谷歌图表
- here-api - 免费增值帐户中可用的 ADAS_ATTRIB 属性?
- angular - 构建'找不到名称'排除'时出现lodash-es错误。
- java - 通过套接字或回调进行持续的服务器客户端通信