Как выполнить этот запрос 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.