Java 将字符串数组添加到MongoDB中的ProjectionOperation

Java 将字符串数组添加到MongoDB中的ProjectionOperation,java,mongodb,spring-boot,spring-mongodb,Java,Mongodb,Spring Boot,Spring Mongodb,我需要添加需要使用mongodb聚合获取的字段(从ui获取) 从uri中,我将获取参数作为字段,该字段具有逗号分隔的字段字符串 http://foo.com?fields=id,name 文档如下所示: { "_id" : "3a237c007a87d", "name" : "Available", "is_active" : true, } 以下内容将根据我的需要工作并产生结果 Aggregation aggregation = newAggregation

我需要添加需要使用mongodb聚合获取的字段(从ui获取)

从uri中,我将获取参数作为字段,该字段具有逗号分隔的字段字符串

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)
            );
上面的查询得到了我想要的内容,并显示如下

{
    "_id" : "3a237c007a87d", 
    "name" : "Available"
 }
如果我使用下面的查询运行,我将得到至少一个需要在项目中指定的字段 以及守则:

ProjectionOperation project = project();
for(String field : fields) {
    project.andInclude(field);
}
但该字段没有添加ProjectOnOperation 如果项目运作需要有

{ "$project" : {"id":1, "name":1 } }

Aggregation aggregation = newAggregation(            
        project,
        skip((page-1)*limit),
        limit(limit)
        );

 The output need to be

{
    "_id" : "3a237c007a87d", 
    "name" : "Available"
 }

我喜欢避免检查列表中是否包含他们希望在project中包含的字段。

是否可能只是混淆了一些变量(
fields
vs
fieldList
)?此外,还需要使用
和include()调用的返回值,请尝试以下操作:

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);
}
List fieldList=new ArrayList();
字段列表。添加(“id”);
字段列表。添加(“名称”);
ProjectionOperation项目=项目();
对于(stringfield:fieldList){//注意,我在这里使用的是'fieldList'
项目=项目,包括(现场);
}