Как выполнить @Query (значение = "") монпозиторный запрос для извлечения записей даты выполнения в формате строки - PullRequest
0 голосов
/ 10 октября 2019

'executeDate' - это поле в mongodb в строковом формате, мне нужно извлечь запись между 2 датами выполнения, проанализировав формат строки в формат Date, используя @Query (value = "")

Iвыполнили запрос mongodb в консоли, как показано ниже:

db.testExecution.aggregate ([{$ project: {date: {$ dateFromString: {dateString: '$ executeDate'}}}}, {$ match: {date: {$ lt: ISODate ("2019-10-16T06: 35: 03Z")}}}, {$ match: {date: {$ gt: ISODate ("2019-09-16T06: 55:03Z ")}}}])

Вывод:

{ "_id" : ObjectId("5d7f8627ea9c671b877d554f"), "date" : ISODate("2019-09-16T06:55:10Z") }
{ "_id" : ObjectId("5d7f8627ea9c671b877d503f"), "date" : ISODate("2019-10-16T06:25:03Z") }
{ "_id" : ObjectId("5d7f8627ea9c671b877d502f"), "date" : ISODate("2019-09-16T10:55:55Z") }

Мне нужно написать это в формате запроса mongoRepository,

, когда я написал запрос, подобный этому,

@Query(value = "{$project: {date: {$dateFromString: {dateString: '$executionDate'}}}}, {$match: {date: {$lt: ?0)}}} , {$match: {date: {$gt: ?1)}}}")
    List<TestResultResponseDomain> findByExecutionDate(Date from, Date to);

Я получаю сообщение об ошибке, как показано ниже.

Caused by: com.mongodb.MongoQueryException: Query failed with error code 2 and error message 'unknown top level operator: $project' on server localhost:27017
    at com.mongodb.operation.FindOperation$1.call(FindOperation.java:722) ~[mongodb-driver-core-3.6.3.jar:na]
    at com.mongodb.operation.FindOperation$1.call(FindOperation.java:711) ~[mongodb-driver-core-3.6.3.jar:na]
    at com.mongodb.operation.OperationHelper.withConnectionSource(OperationHelper.java:471) ~[mongodb-driver-core-3.6.3.jar:na]
    at com.mongodb.operation.OperationHelper.withConnection(OperationHelper.java:415) ~[mongodb-driver-core-3.6.3.jar:na]
    at com.mongodb.operation.FindOperation.execute(FindOperation.java:711) ~[mongodb-driver-core-3.6.3.jar:na]
    at com.mongodb.operation.FindOperation.execute(FindOperation.java:83) ~[mongodb-driver-core-3.6.3.jar:na]
    at com.mongodb.Mongo$3.execute(Mongo.java:826) ~[mongodb-driver-3.6.3.jar:na]
    at com.mongodb.MongoIterableImpl.execute(MongoIterableImpl.java:130) ~[mongodb-driver-3.6.3.jar:na]
    at com.mongodb.MongoIterableImpl.iterator(MongoIterableImpl.java:77) ~[mongodb-driver-3.6.3.jar:na]
    at org.springframework.data.mongodb.core.MongoTemplate.executeFindMultiInternal(MongoTemplate.java:2440) ~[spring-data-mongodb-2.0.5.RELEASE.jar:2.0.5.RELEASE]

1 Ответ

0 голосов
/ 11 октября 2019

Привет Агрегация не может быть выполнена с помощью аннотации @Query в Spring-data-mongoDB. Вы должны написать свою собственную реализацию класса репозитория, а затем написать агрегацию, используя конкретные классы. Вы можете использовать ссылку ниже, чтобы узнать, как это сделать.

https://xpadro.com/2016/04/data-aggregation-with-spring-data-mongodb-and-spring-boot.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...