Добавить массив строк в ProjectionOperation в MongoDB - PullRequest
0 голосов
/ 23 мая 2018

Мне нужно добавить поля (получить из пользовательского интерфейса), которые должны быть получены с помощью агрегации mongodb,

Из 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)
            );

Приведенный выше запрос получает то, что я хочу, и его показано ниже

{
    "_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"
 }

Я бы хотел избежать проверки того, содержит ли список поле, как они хотят в проекте.

1 Ответ

0 голосов
/ 23 мая 2018

Возможно ли, что вы просто путаете некоторые переменные здесь (fields против 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...