mongodb 无法将第二个OR添加到条件

r1zk6ea1  于 2023-04-29  发布在  Go
关注(0)|答案(1)|浏览(174)

我正在尝试在我的标准中添加第二个手术室。我得到一个错误Due to limitations of the com.mongodb.BasicDBObject, you can't add a second 'null' criteria
当我调试它时,我看到第一个OR正在向Criteria的HashMap添加一个值,其中null作为键。当它试图添加第二个键时,它发现空键存在,因此抛出错误。

if (par1 != null) {
        query.addCriteria(
                new Criteria().orOperator(
                        Criteria.where(Book.SOME_FIELD + "." + BookDetail.CATEGORY_FIELD).is(par1),
                        Criteria.where(Book.OTHER_FIELD + "." + BookDetail.CATEGORY_FIELD).is(par1)
                )

        );

    }

    if (par2 != null) {

        query.addCriteria(
                new Criteria().orOperator(
                        Criteria.where(Book.SOME_FIELD + "." + BookDetail.TYPE_FIELD).is(par2),
                        Criteria.where(Book.OTHER_FIELD + "." + BookDetail.TYPE_FIELD).is(par2)
                )

        );
    }

我想用相应的字段检查非空参数。
如果我只发送一个参数,它就可以工作。问题是当我同时发送两个参数的时候。
谢谢。

dced5bon

dced5bon1#

如果两个参数都不是null,你必须使用andOperator()将其组合成一个条件,而不是调用两个独立的addCriteria方法,类似于这样:

if(par1 != null && par2 != null){
          query.addCriteria(
            new Criteria().andOperator(
              new Criteria().orOperator(
                Criteria.where(Book.SOME_FIELD + "." + BookDetail.CATEGORY_FIELD).is(par1),
                Criteria.where(Book.OTHER_FIELD + "." + BookDetail.CATEGORY_FIELD).is(par1)),
              new Criteria().orOperator(
                Criteria.where(Book.SOME_FIELD + "." + BookDetail.TYPE_FIELD).is(par2),
                Criteria.where(Book.OTHER_FIELD + "." + BookDetail.TYPE_FIELD).is(par2)));
    } else if (par1 != null) {
          query.addCriteria(
            new Criteria().orOperator(
              Criteria.where(Book.SOME_FIELD + "." + BookDetail.CATEGORY_FIELD).is(par1),
              Criteria.where(Book.OTHER_FIELD + "." + BookDetail.CATEGORY_FIELD).is(par1)));
    } else if (par2 != null) {
          query.addCriteria(
            new Criteria().orOperator(
              Criteria.where(Book.SOME_FIELD + "." + BookDetail.TYPE_FIELD).is(par2),
              Criteria.where(Book.OTHER_FIELD + "." + BookDetail.TYPE_FIELD).is(par2)));
    }

相关问题