首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将BasicDBList of $OR标准传递给QueryBuilder?

如何将BasicDBList of $OR标准传递给QueryBuilder?
EN

Stack Overflow用户
提问于 2014-03-14 02:14:22
回答 1查看 332关注 0票数 0

我的应用程序是通过QueryBuilder动态生成一个mongo查询。我正在努力使它能够与我的集合中的几个字段进行比较。我需要遍历数据,以便知道要向$OR添加什么( 'text_to_compare‘vs title字段,'text_to_compare vs body字段’),因此我一直试图将$OR子句的每一部分存储在BasicDBList中,如下所示:

代码语言:javascript
复制
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":应该出现在那里。如有任何建议,将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2014-03-14 02:30:04

你这样做有点不对。不是重新编写代码,但您应该有这样的想法:

代码语言:javascript
复制
    // 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操作符。请考虑以下几点:

代码语言:javascript
复制
    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());
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22394902

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档