fullSearch (query methods)

Essa full search possui um start e end date, veja:

Nosso Post possui um instant, correto? Portanto, esse moment precisa estar entre o start e end da requisição.

Como é full search, o text deve estar contido ou no title, body ou nos comments.

Inicialmente a consulta no @Quey começará com uma lista de condições "end".

O $and tem a seguinte sintaxe:

{ $and: [ { }, { } , ... , { } ] }

Cada expressão ali dentro será uma condicional.

List<Post> fullSearch(String text, Instant startMoment, Instant endMoment);

As duas primeiras condicionais serão o startMoment e endMoment, ou seja, "?1 e ?2".

O startMoment (?1):

terá o operador $gte. Ele seleciona os documentos nos quais o valor do campo especificado é maior ou igual a (ou seja, >=).

Sintaxe: { field: { $gte: value } }O value é = ?1 (parâmetro do método no Repository).

O endMoment (?2):

terá o operador $lte. Ele seleciona os documentos em que o valor de field é menor ou igual ao value especificado (ou seja, <=).

Sintaxe: { field: { $lte: value } }O value é = ?2 (parâmetro do método no Repository).

O terceiro e ultimo parâmetro (?3):

Ele vai ser inserido dentro da condicional $and, será os campos de text.

Dessa vez, ele não será um search somente do title. Ele buscará no title, post e comments. Assim sendo, serão 03 fields, onde usaremos $or.

"{ 'title': { $regex: ?0, $options: 'i' } }, "{ 'body': { $regex: ?0, $options: 'i' } }, "{ 'comments.text': { $regex: ?0, $options: 'i' } }

Veja como irá ficar a consulta no repository ➡️

Atualizado