Morphia中的复杂查询

时间:2013-08-07 14:11:38

标签: java mongodb morphia

在我的方法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"}}]}]
    }"
) 

但它不起作用。

有什么建议吗?

2 个答案:

答案 0 :(得分: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") })
);

答案 1 :(得分:1)

这是现在的代码(它工作正常,但我放弃了morphia):

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;

}

使用吗啡还有另一种方法吗?