我需要在此示例中自定义聚合匹配条件(注意:
filters
是我需要在中实现的所有条件的列表
$match
):
public static void filterQueryForSuppWarning(QueryParamDto queryParamDto, List<Bson> filters) {
if (queryParamDto != null) {
if (!CollectionUtils.isEmpty(queryParamDto.getUets())) {
filters.add(eq(ID_UET.getLabel(),queryParamDto.getUets()));
}
if (!CollectionUtils.isEmpty(queryParamDto.getMgtgroups())) {
filters.add(eq(PN_MANAGEMENT_GROUP.getLabel(), queryParamDto.getMgtgroups()));
}
if (!CollectionUtils.isEmpty(queryParamDto.getSuppliers())) {
filters.add(eq(SupplierFieldEnum.SUP_NAME.getLabel(), queryParamDto.getSuppliers()));
}
if (!StringUtils.isEmpty(queryParamDto.getReference())) {
filters.add(eq(ID_PN_PARTNUMBER.getLabel(), queryParamDto.getReference()));
}
if (!CollectionUtils.isEmpty(queryParamDto.getSupplierAddressCodes())) {
filters.add(eq(SupplierFieldEnum.CODE_SUPPLIER_DLAP_SITE.getLabel(), queryParamDto.getSupplierAddressCodes()));
}
if (!CollectionUtils.isEmpty(queryParamDto.getSupplierAccounts())) {
filters.add(eq(SupplierFieldEnum.ID_SUP_NUMBER.getLabel(), queryParamDto.getSupplierAccounts()));
}
if (!StringUtils.isEmpty(queryParamDto.getAppReference())) {
filters.add(eq(APP_REFERENCE.getLabel(), queryParamDto.getAppReference()));
}
if (!CollectionUtils.isEmpty(queryParamDto.getWarnings())) {
for (String code : queryParamDto.getWarnings()) {
filters.add(eq(code.toLowerCase(),1));
}
}
}
}
的问题
aggregate.match
不支持
List<Bson>
.
我如何在我的查询中实现许多类似于此示例的条件:
AggregateIterable<Document> result = collection.aggregate(Arrays.asList(
Aggregates.match(and(eq("dt_extract","2017-07-03"), eq("id_pn_partnumber",queryParamDto.getReference()))),
Aggregates.project(include("id_sup_number","sup_name", "group_name","code_supplier_dlpa_site","idPnPartNumber"))
));