У меня есть класс документа Article, например.
package com.document.feed.model;
import java.util.List;
import org.bson.types.ObjectId;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.lang.NonNullFields;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
class Source {
private String id;
private String name;
}
@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
@Document
@Getter
@Setter
@JsonIgnoreProperties(ignoreUnknown = true)
public class Article {
@Id
private String id;
private Source source;
private String author;
private String title;
private String description;
private String url;
private String urlToImage;
private String publishedAt;
private String content;
private String country;
private String category;
// Vector of Tf-Idf weights.
private List<Double> v;
// Extra fields computed during ordering.
private double dot;
// public Article(String id, String author, Double dot) {
// this.id = id;
// this.author = author;
// this.dot = dot;
// }
}
Я использую конвейер агрегации, чтобы выбрать только author
и dot
документов как:
{
author: 1,
dot: 1
}
Агрегация сделано как:
Aggregation aggregation = newAggregation(Article.class,
aggregate("$project",
projection),
sort(Sort.Direction.DESC, "dot")
);
return mongoTemplate.aggregate(aggregation, "article", Article.class);
Но я получаю ответ API как:
{
"id": "5e137c67771a9880d1639b5d",
"source": null,
"author": "Asian News International",
"title": null,
"description": null,
"url": null,
"urlToImage": null,
"publishedAt": null,
"content": null,
"country": null,
"category": null,
"v": null,
"dot": 3.2454110250954025
},
Я хочу, чтобы в качестве выходных данных были только ненулевые поля. Я могу сделать это, определив новый класс POJO только для обязательных полей, но есть ли способ сделать это без определения новых классов (Это будет кошмар, если проекция является параметром только API)?