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"}}]}]
    }"
) 

但它不起作用。

有什么建议么?

4

2 回答 2

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") })
);
于 2013-08-07T15:32:15.460 回答
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;

}

还有另一种方法可以用吗啡来做到这一点?

于 2013-08-09T09:58:25.090 回答