在我的方法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 :(得分: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;
}
使用吗啡还有另一种方法吗?