MongoDB Java использовать несколько фильтров и получить последний - PullRequest
1 голос
/ 13 мая 2019

В моей коллекции документы выглядят так:

enter image description here

Мне удалось получить последний вставленный документ, выполнив это:

collection.find().sort(new Document("date",-1)).first().getDate()

Но теперь мне нужно получить последнее по дате И, которое имеет конкретное значение для functionalityName.Я застрял, потому что я не знаю, как изменить его, чтобы принять во внимание оба фильтра.Как мне это сделать?
Я посмотрел несколько фильтров в Mongo, но, поскольку я ищу не конкретную дату, а более крупную (последнюю), я не знаю, как указать ее вместе сдругие фильтры.

Ответы [ 2 ]

1 голос
/ 16 мая 2019

Конкатенация find, sort и так далее, безусловно, работает, , но только find() фактически выполняется на стороне базы данных, она вернет результат, а затем к нему будет применена сортировкапо вашему приложению.

Если вы хотите создать запрос, который выполняет все эти операции базы данных, вам нужен конвейер .Для этого вы можете использовать Aggregation Framework драйвера java, который позволяет вам делать что-то подобное

collection.aggregate(
      Arrays.asList(
              match(eq("functionalityName", "specificValue")),
              sort(descending("date")),
              project(fields(include("date")))
      )
)

В документации вы можете найти все этапычто вы можете применить к своему конвейеру.

1 голос
/ 13 мая 2019

Звучит так, будто вам нужен один фильтр и сортировка, и запрос будет выглядеть так:

collection.find(Filters.eq("functionalityName", "specificValue"))
          .sort(new Document("date",-1))
          .first()
          .getDate()

Таким образом, часть sort остается как есть, а в части find вы добавляете фильтр.

Вам также нужно будет импортировать класс Filters:

import com.mongodb.client.model.Filters.*;

В качестве альтернативы вы можете импортировать класс Filters статически для краткости, вот как приведены примеры в официальной документации Filters , которые вы можете проверить, если вам нужно добавить дополнительные фильтры .

import static com.mongodb.client.model.Filters.*;

// ...

collection.find(eq("functionalityName", "specificValue"))
      .sort(new Document("date",-1))
      .first()
      .getDate()
...