我的应用程序是通过QueryBuilder动态生成一个mongo查询。我正在努力使它能够与我的集合中的几个字段进行比较。我需要遍历数据,以便知道要向$OR添加什么( 'text_to_compare‘vs title字段,'text_to_compare vs body字段’),因此我一直试图将$OR子句的每一部分存储在BasicDBList中,如下所示:
BasicDBObject orsDBObject = new BasicDBObject();
BasicDBList orsList = new BasicDBList();
for( String dbFieldNameInstance: listDBFieldName ){
QueryBuilder innerQB = new QueryBuilder();
innerQB.put(dbFieldNameInstance).is(obj.getValue()); //using this inner QueryBuilder to assist in creating the document
orsList.add(innerQB.get());
}
orsDBObject.putAll(orsList); //put each of the BasicDBList items into a BasicDBObject
qb.or(orsDBObject); //finally, add the entire $OR clause to my bigger querybuilder
System.out.println("qb: " + qb.get());似乎我正在经历比必要的更多的转换。它也不起作用。以上输出结果如下所示:
{ "$or“:{ "0”:{ "primary_industries_names“:”电气“},"1”:{ "primary_industries_aliases“:”电气“},"2”:{ "secondary_industries_names“:”电气“},"3”:{ "secondary_industries_aliases“:”电气“},"4“:{ "product_experience_names”:“电气”},"5“:{ "product_experience_aliases”:“电气”}}
在大多数情况下,在我看来,这是正确的,但我不认为"0":应该出现在那里。如有任何建议,将不胜感激。
发布于 2014-03-14 02:30:04
你这样做有点不对。不是重新编写代码,但您应该有这样的想法:
// Before the loop
QueryBuilder qb = new QueryBuilder();
// And loop things like this
for ( ) {
qb.or(new BasicDBObject("this","that"));
}
// After loop
System.out.println(qb.get());如果您试图嵌套多个条件,那么您似乎缺少了$and操作符。请考虑以下几点:
QueryBuilder qb = new QueryBuilder();
for (int x=0; x<2;x++) {
qb.or(new BasicDBObject("this","that"));
}
QueryBuilder qb2 = new QueryBuilder();
qb2.and(qb.get());
QueryBuilder qb3 = new QueryBuilder();
for (int x=0; x<2;x++) {
qb3.or(new BasicDBObject("something", "else"));
}
qb2.and(qb3.get());
System.out.println(qb2.get());https://stackoverflow.com/questions/22394902
复制相似问题