Как выполнить этот запрос MongoDB с помощью java?

Мне нужно написать простой запрос MongoDB с помощью java, но я не могу этого сделать.

Запрос mongo выглядит следующим образом:

db.yourCollection.find({"$where" : "this.startDate < this.endDate"})

Мне нужно написать вышеуказанный запрос, используя класс QueryBuilder. Но я не могу это сделать в драйвере MongoDB java.

BasicDBObject document = new BasicDBObject();
document.put("id", 1001);
document.put("intValue", 1200);
document.put("updateValue", 2100);

DBObject query = QueryBuilder.start("intValue").lessThan("updateValue").get();
DBCursor cursor = collection.find(query);
while (cursor.hasNext()) {
System.out.println("Result : -"+cursor.next());}

Приведенный выше код не возвращает никаких результатов. Но если он изменен на updateValue на 2100, он дает результат. Мой вопрос здесь lessThan принимает объект в качестве входного параметра. Затем, как я могу передать поле документа в качестве входного параметра?

Ответ 1

В идеале ваш запрос mongoDB должен выглядеть следующим образом: -

db.yourCollection.find({"startDate": {$lt: endDate}})

который может быть написан на Java следующим образом: -

BasicDBObject query = new BasicDBObject("startDate", new BasicDBObject("$lt", endDate);
DBCursor cursor = coll.find(query);

Вы можете посмотреть Официальное руководство


Если вы хотите использовать QueryBuilder, вы можете сделать это следующим образом: -

DBObject query = QueryBuilder.start("startDate").lessThan("endDate").get();
DBCursor cursor = coll.find(query);

Ответ 2

QueryBuilder помогает создавать сложные запросы для извлечения данных из коллекции в mongo db. Вы можете использовать QueryBuilder следующим образом.

BasicDBObject document = new BasicDBObject();
QueryBuilder qb = new QueryBuilder();
qb.or(new QueryBuilder().put("starting_date").is(null).put("ending_date").is(null).get(),
                new QueryBuilder().put("starting_date").lessThanEquals("ending_date").get());
document.putAll(qb.get());
DBCursor cursor = getDbCollection().find(document)
  • QueryBuilder qb = new QueryBuilder(), создает новый QueryBuilder.
  • Логика, построенная QueryBuilder в приведенном выше примере; (начальная дата = нуль и конечная дата = нуль) или (дата начала <= дата окончания)
  • document.putAll(qb.get()) добавляет логику, построенную в DBObject.