У меня возникли проблемы с форматированием запроса ниже, чтобы он мог анализировать утилиту JSON, предоставленную MongoDB Java driver, и я хотел бы предложить предложения. Во-первых, некоторый контекст.Выполнение подготовленных запросов mongodb с использованием драйвера Java
Испытательная основа, в конце каждого прогона, хранит результаты испытаний в MongoDB. Вот 2 такие образцы из коллекции «TestResults»:
{
"_id" : ObjectId("SomeId#1"),
"_class" : "com.example.dao.entity.TestResults",
"testScenario" : "Test login",
"runId" : 314,
"runDate" : ISODate("2016-12-14T15:51:04.586Z"),
"status" : "passed"
}
{
"_id" : ObjectId("SomeId#2"),
"_class" : "com.example.dao.entity.TestResults",
"testScenario" : "Test reset password",
"runId" : 314,
"runDate" : ISODate("2016-12-14T20:50:01.269Z"),
"status" : "passed"
}
И еще одна коллекция под названием «Запросы» содержит предварительно написанные шаблоны запросов. Запроса ниже find
сек Документов по runDate
:
{
"_id": ObjectId("SomeId#3"),
"_class": "com.example.dao.entity.Query",
"query": "{\"runDate\":{\"$gte\":new Date(\"%1$s\"),\"$lt\":new Date(\"%2$s\")}}"
}
намерение состоит в том, чтобы использовать вышеупомянутый шаблон запроса, после добавления допустимого диапазона времени, по сбору и процессу вышеупомянутого «» TestResults дальше. Вот что я пытался до сих пор:
Использование JSON.parse():
LocalDateTime dateTime1=LocalDateTime.of(2016, 12, 14, 00, 00,00);
LocalDateTime dateTime2 = dateTime1.plusHours(24);
/* Gets date range query from 'Queries' collection */
String dateRange = getDateRangeQuery();
/* Apply time range for last 24 hours... */
dateRange = String.format(dateRange,dateTime1.format(DateTimeFormatter.ISO_DATE_TIME),dateTime2.format(DateTimeFormatter.ISO_DATE_TIME));
BasicDBObject dayQuery=(BasicDBObject) JSON.parse(dateRange);
FindIterable<Document> result = database.getCollection("testResults").find(dayQuery);
result.forEach(new Block<Document>() {
@Override
public void apply(Document t) {
System.out.println("QUERY RESULT:"+t.toJson());
}
});
на бег, JSON.parse() бросает это исключение
com.mongodb.util.JSONParseException:
{"runDate":{"$gte":new Date("2016-12-14T00:00:00"),"$lt":new Date("2016-12-15T00:00:00")}}
^
at com.mongodb.util.JSONParser.read(JSON.java:301)
at com.mongodb.util.JSONParser.parse(JSON.java:172)
at com.mongodb.util.JSONParser.parseObject(JSON.java:263)
at com.mongodb.util.JSONParser.parse(JSON.java:227)
at com.mongodb.util.JSONParser.parseObject(JSON.java:263)
at com.mongodb.util.JSONParser.parse(JSON.java:227)
at com.mongodb.util.JSONParser.parse(JSON.java:155)
at com.mongodb.util.JSON.parse(JSON.java:92)
at com.mongodb.util.JSON.parse(JSON.java:73)
с использованием BsonDocument .parse():
BsonDocument.parse()
смог разобрать запрос, но я не смог найти способ настройте имя коллекции для BsonDocument
, которое будет использоваться в MongoDatabase.runCommand()
Итак, какие у меня варианты?
Запрос совпадает с найденным в [Найти объекты между двумя датами MongoDB] (http://stackoverflow.com/q/2943222/531762). Я также пробовал это по своим собственным данным и, похоже, работает для меня в RoboMongo. Так что это не похоже на источник ошибки. – Thunderforge