2013-08-07 6 views
1

в моем методе Java, я хотел бы передать в качестве параметра для моей коллекции MongoDB сложного запроса, как этот:Комплексный запрос в морфии

{"$or": [{"$and": [{"contextID": "AKKA"}, {"messageID": "PIPPO"}]}, 
     {"$and": [{"domain": "Niguarda"}, {"hostName": {"$ne": "hostServer"}}]} 
     ] 
} 

Строка, которая содержит запрос является переменной и передаются как параметр в строке запроса.

Я попытался передать запрос в качестве параметра метода критериев

(queryDB.criteria(" 
    {"$or": [ 
     {"$and": [{"contextID": "AKKA"}, {"messageID": "PIPPO"}]}, 
     {"$and": [{"domain": "Niguarda"}, {"hostName": {"$ne": "hostServer"}}]}] 
    }" 
) 

, но он не работает.

Любые предложения?

+0

Можете ли вы пояснить, что вы подразумеваете под словом «это не работает». Это ошибка? Если да, то какая ошибка. Не дает ли результата ожидаемый результат? Если нет, то в чем разница. –

+0

В результате получается то же самое, что я получаю с пустым запросом – user2661044

+0

Важно: параметр критериев передается переменной String. – user2661044

ответ

1

То, что вы пытаетесь сделать бы

Query q = dao.createQuery(); 
q.or(
q.and(new Criteria[]{ dao.createQuery().filter("contextID").equal("AKKA"), 
         dao.createQuery().filter("messageID").equal("PIPPO") }), 
q.and(new Criteria[]{ dao.createQuery().filter("domain").equal("Niguarda"), 
         dao.createQuery().filter("hostname").notEqual("hostServer") }) 
); 
+0

Невозможно для меня. Запрос является динамическим, то есть передается в код по параметру. – user2661044

+0

Можете ли вы отредактировать вопрос, чтобы отразить этот последний комментарий, который вы сделали? что не так с помощью фильтра (dynamicParam) .equal (dynamicParam2) и т. д.? –

+0

Структура запроса является переменной. – user2661044

1

Это теперь код (он работает нормально, но я отказался от морфий):

public long count(String query) throws Exception { 
    DB db = mongoClient.getDB(mongoDBName); 
    DBCollection dbCollection = db.getCollection(mongoDBCollection); 

    DBObject dbObjQuery; 

    long l = 0; 
    try { 

     if (!(query == null)) { 
      dbObjQuery = (DBObject) JSON.parse(query); 
      l = dbCollection.find(dbObjQuery).count(); 
     } else { 
      l = dbCollection.find().count(); 
     } 


    } catch (Exception e) { 

    } finally { 

    } 

    return l; 

} 

Существует еще один способ сделать это с морфий?

+1

Я не думаю, что вы сможете создать динамический запрос с Морфией, не делая ничего подобного отражению. Однако, если вы указали класс Java объекта, на который вы запрашиваете, это может помочь нам найти решение. – Trisha

+0

Вам не нужно было бросать морфию, вы можете получить доступ к драйверу напрямую, а также через морфию. –

Смежные вопросы