2017-03-15 12 views
0

でOR条件を使用してクエリを実行するには、どのように私はMongoDBの構造を持っているのDBcursor

{ 
    "_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 
    } 

所有者名は、ユーザー名になります。

私は、ユーザー名が審査や承認者として、いくつかの文書に記載されている場合、その結果もでてくるはずです 1. curFlagがTrueの場合、 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で所有者名が承認者またはレビュー担当者としてリストされている場合と同様に機能します。

しかし、国がインドで、curFlagがtrueであるか、所有者名が承認者または査読者としてリストされているように質問したいと思います。

誰かが私に助けてくれますか?

+1

正しい形式でないjsonドキュメント構造を修正して、期待される出力が何であるかをexaplainしてください。 – radhakrishnan

答えて

0

youreのは、このようにしようとした場合、

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オブジェクトでなければなりません。

関連する問題