Запрос Mongo DB в Java

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

Запрос монго выглядит так:

db.video.findOne( { 
    $or: [ 
        { key1: { $in : [764] } }, 
        { key2: {$in : [list2] } }, 
        { $and [ { key2 : 3}, {key4:67} ] } 
    ]
})

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

Спасибо


person Global Warrior    schedule 04.05.2012    source источник


Ответы (2)


Используя QueryBuilder, ваш запрос должен выглядеть так

DBObject query = QueryBuilder.start().or(
    QueryBuilder.start("key1").in(764).get(),
    QueryBuilder.start("key2").in(keys).get(),
    QueryBuilder.start().and("key3").is(3).and("key4").is(64).get()
 ).get();

Рассмотрите возможность использования jongo (API поверх mongo-java-driver), вы можете просто копировать/вставлять запросы из оболочки:

collection.findOne("{$or:[{key1: {$in:[764]}},{key2:{$in:[#]}}, {$and:[{key3:3},{key4:67}]}]}", keys).as(People.class);
person Benoît Guérout    schedule 04.05.2012
comment
Но как выполнить запрос (DBObject)? - person Qasim; 01.06.2015

У меня была такая же проблема, и я нашел решение другим способом:

ArrayList orList = new ArrayList();
ArrayList andList = new ArrayList();

orList.add(new BasicDBObject("key1", new BasicDBObject("$in", 764)));                  
orList.add(new BasicDBObject("key2", new BasicDBObject("$in", list2)));

andList.add(new BasicDBObject("key2", 3));
andList.add(new BasicDBObject("key4", 67));

orList.add(new BasicDBObject("$and", andList));

BasicDBObject query = new BasicDBObject("$or", orList);
person Kendor    schedule 31.05.2012
comment
Но как выполнить запрос (DBObject)? - person Qasim; 01.06.2015