Я работаю над извлечением данных из MongoDB, используя его драйвер Java.Я пытаюсь добавить данные фильтра в мой запрос, когда он не только нулевой.Если в то время данные фильтров имеют нулевое значение, они возвращают нулевые значения, поскольку не могут найти данные, удовлетворяющие запросу, поскольку фильтры являются нулевыми.Но концепция состоит в том, чтобы исключить эту фильтрацию данных и перейти к остальным, где такие условия, как BELONGS_TO_OWNER_DSID
, IS_DELETED
only.
Я пытался использовать match(ne(filter, null))
, но он показывает ошибку компиляции.
List<Bson> filters = new ArrayList<Bson>();
if (valueOfMonth != 0) {
filters.add(gt(TECHNOLOGY_VERSION_EOL_KEY, LocalDate.now()));
filters.add(lt(TECHNOLOGY_VERSION_EOL_KEY, getFutureDate(valueOfMonth)));
}
Map<String, Object> multiIdMap = new HashMap<String, Object>();
multiIdMap.put(APPLICATION, "$application");
multiIdMap.put(TECHNOLOGY, "$technology");
@SuppressWarnings({ "rawtypes", "unchecked" })
AggregateIterable<Document> result = technologiesCollection.aggregate(
Arrays.asList(
match(eq(BELONGS_TO_OWNER_DSID, dsId)),
match(eq(IS_DELETED, false)),
match(and(filters)),
project(Projections.include(TECHNOLOGY, APPLICATION)),
group(multiIdMap, Accumulators.sum("count", 1)),
sort(eq("count", 1)),
addFields(new Field("data", "$_id")),
project(eq("_id", 0))),
Document.class);
Ожидаемый результат, если valueOfMonth=0
, то я не хочу, чтобы эти данные фильтра были в запросе where, а использовали только остальные поля, такие как BELONGS_TO_OWNER_DSID
, IS_DELETED
, и выдали бы весь результат.
Данные фильтрации должны фильтроваться только в том случае, если valueOfMonth
больше нуля, но если оно равно нулю, возвращаются все значения, которые соответствуют только BELONGS_TO_OWNER_DSID
, IS_DELETED
, без valueOfMonth
.
Код работает, как и ожидалось, если я дам valueOfMonth>0
.Однако с 0 он вернет ноль, поскольку не может найти данные, удовлетворяющие запросу.