我需要添加需要使用mongodb Aggregation获取的字段(来自ui),
从uri我将得到param作为具有逗号分隔字符串的字段
http://foo.com?fields=id,name
文档如下:
{
"_id" : "3a237c007a87d",
"name" : "Available",
"is_active" : true,
}
以下将按我的意愿工作并生成结果
Aggregation aggregation = newAggregation(
project(fields.contains("name") ? "name" : "",
fields.contains("id") ? "id" : ""),
fields.contains("is_active") ? "is_active" : ""),
skip((page-1)*limit),
limit(limit)
);
上面的查询得到了我想要的东西以及它显示的belo
{
"_id" : "3a237c007a87d",
"name" : "Available"
}
如果我使用以下查询运行,则至少需要在项目中指定一个字段 代码:
ProjectionOperation project = project();
for(String field : fields) {
project.andInclude(field);
}
但该字段未在projectionOperation中添加 如果projectOperation需要喜欢
{ "$project" : {"id":1, "name":1 } }
Aggregation aggregation = newAggregation(
project,
skip((page-1)*limit),
limit(limit)
);
The output need to be
{
"_id" : "3a237c007a87d",
"name" : "Available"
}
我想避免检查列表是否包含项目中的字段。
答案 0 :(得分:0)
您是否可能只是混淆了一些变量(fields
vs fieldList
)?此外,您需要使用andInclude()
调用的返回值尝试此操作:
List<String> fieldList = new ArrayList<>();
fieldList.add("id");
fieldList.add("name");
ProjectionOperation project = project();
for(String field : fieldList) { // note that I'm using 'fieldList' here
project = project.andInclude(field);
}