我是MongoDB的新手,请原谅我的无知。
我有一个mongoDB,其中包含一堆类似这样的文档
["field": "blah", "version":"1" ...]
["field": "blah", "version":"2" ...]
["field": "blah", "version":"1"....]
["field": "blah1", "version":"10"...]
["field": "blah2", "version":"100"...]
["field": "blah3", "version":"1"....]
["field": "blah3", "version":"2"....]
["field": "blah2", "version":"1"....
我正在尝试发送查询列表并批量获取所有记录。有可能这样做吗?
List<Docs> fetchDocs(Map<String, String> queries)
{
CriteriaContainer cc=null;
Query<Docs> query = this.mongoDao.createQuery(MyClass.class);
for (Map.Entry<String,String >entry : queries.entrySet())
{
if(cc ==null)
{
cc= query.criteria("Field").equal(entry.getKey()).and(query.criteria("version").equal(entry.getValue()));
}
else
{
cc.or(query.criteria("Field").equal(entry.getKey()).and(query.criteria("version").equal(entry.getValue()));)
}
}
query.and(cc);
List<Docs> doc = query.asList();
return doc;
}
我没有找到正确的清单。我不确定我是否正确编写了这个查询。
基本上,我想要获取结果或查询[{"Field":"blah,"version":1 } $or {"Field":"blah1", "version":10} ]
它应该返回一个包含
的列表["field": "blah", "version":"1" ....]
["field": "blah1", "version":"10"....]
答案 0 :(得分:0)
是的,这绝对是可以的。但是,最终查询对象看起来更像是这样:
{$or: [{"field": "blah,"version":1 }, {"field":"blah1", "version":10} ]}
注意$or表达式的子查询数组。
Morphia中存在一些怪癖,这意味着你必须将它包装在$和子句中。所以你的代码就像这样:
Query q = dao.createQuery();
q.and(
q.or(subQuery1),
q.or(subQuery2),
...
);
答案 1 :(得分:0)
我最终修复了我的查询到哪个工作。想与其他人分享
List<Docs> fetchDocs(Map<String, String> queries){
Criteria [] c = new Criteria[queries.size()];
Query<TUCacheDoc> query0 = this.mongoDao.createQuery(MyClass.class);
int counter=0;
for (Map.Entry<String, String> entry : inMap.entrySet()) {
Query<TUCacheDoc> queryC = this.mongoDao.createQuery(MyClass.class);
String key= entry.getKey();
String val= entry.getValue();
Criteria cC = queryC.criteria("field").equal(key).criteria("version").equal(val);
c[counter]=cC;
counter++;
}
query0.or(c);
List<TUCacheDoc> qresult = query0.asList();
return qresult;
}