如何在DBCursor中使用或条件查询

时间:2017-03-15 07:45:37

标签: mongodb

我的MongoDB结构如下所示:

  {
    "_id" : NumberLong(1),
    "_class" : "com.cts.adpart.domain.DBData",
    "file" : "xyz",
    "owner" : "user1",
    "curList" : [
             {                     
                    "approver" : "user2",
                    "reviewer" : "user3",
                    "country" : "India"
             },
    "curFlag" : true
  },
  {
    "_id" : NumberLong(2),
    "_class" : "com.cts.adpart.domain.DBData",
    "file" : "xyz",
    "owner" : "user2"
    "curList" : [
             {
                    "approver" : "user1",
                    "reviewer" : "user3",
                    "country" : "India"
             },
    "curFlag" : true
  }

所有者名称将是用户名。

我必须以这样的方式实现搜索:if 1. curFlag是真的, 2.国家是印度 3.如果用户名在某个文档中列为审阅者或审批者,那么该结果也应该在搜索中

我尝试过以下方式:

        DBCollection myColl = mongoTemplate.getCollection("User_Collection");
        BasicDBObject query = new BasicDBObject("curFlag", true);
        query.append("country","India")
        DBObject approver = new BasicDBObject("curList.reviewer", Util.getOwner());  
        DBObject reviewer = new BasicDBObject("curList.approver", Util.getOwner());    
        BasicDBList or = new BasicDBList();
        or.add(approver);
        or.add(reviewer);
        query.append("$or", or);

我在这里没有得到确切的结果。

上述查询的工作原理如果country是India并且curFlag为true且所有者名称列为批准者或审阅者,则列出该文档。

但是我想查询一下,如果country是India并且curFlag是true或者所有者名称被列为批准者或审阅者我应该列出该文档。

有人可以帮我解决这个问题吗。

1 个答案:

答案 0 :(得分:0)

如果你这样做,

    db.User_Collection.find({
        $or: [{
            "curList.country": "India",
            "curFlag": true
        }, {
            $or: [{
                "curList.approver": "user1"
            }, {
                "curList.reviewer": "user1"
            }]
        }]
    }).pretty()

然后你的java代码应该是,

        DBCollection myColl = mongoTemplate.getCollection("User_Collection");
        BasicDBObject query = new BasicDBObject("curFlag", true);
        query.append("country","India")
        DBObject approver = new BasicDBObject("curList.reviewer", Util.getOwner());  
        DBObject reviewer = new BasicDBObject("curList.approver", Util.getOwner());    
        BasicDBList or = new BasicDBList();
        or.add(approver);
        or.add(reviewer);
        query.append("$or", or);

        BasicDBList orQueryList = new BasicDBList();
        orQueryList.add(query);
        orQueryList.add(or);
        BasicDBObject fullQuery = new BasicDBObject("$or", orQueryList);

使用fullQuery对象查询集合中的数据。