2016-05-12 117 views
0

在MongoDB中,考慮結構如下個人文檔的各種實例:MongoDB的嵌套搜索多包容Criteras

JSON:

{ 
"PersonId": 100, 
"FirstName": "Joe Louis", 
"LastName": "Jordan", 
"Roles": [ 
      { 
       "Id": 93031, 
       "RoleType": 1, 
       "Organization": { 
            "Id": 2, 
            "NameEn": "X", 
            "NameFr": "X" 
           } 
      } 
      { 
       "Id": 93031, 
       "RoleType": 2, 
       "Organization": { 
            "Id": 3, 
            "NameEn": "Y", 
            "NameFr": "Y" 
           } 
      } 
          { 
       "Id": 93031, 
       "RoleType": 3, 
       "Organization": { 
            "Id": 2, 
            "NameEn": "X", 
            "NameFr": "X" 
           } 
      } 
      { 
       "Id": 93031, 
       "RoleType": 4, 
       "Organization": { 
            "Id": 3, 
            "NameEn": "Y", 
            "NameFr": "Y" 
           } 
      } 
          { 
       "Id": 93031, 
       "RoleType": 5, 
       "Organization": { 
            "Id": 2, 
            "NameEn": "X", 
            "NameFr": "X" 
           } 
      } 
     ]} 

我想檢索具有1型的角色所有的人AND 3爲嵌套組織是X(ID:2)

我想下面,但它不是很工作。我需要能夠過濾在具有所需的全部角色的人,然後檢查組織是匹配的角色文件中2

VB.NET:

Dim f As FilterDefinition(Of BsonDocument) = Builders(Of BsonDocument).Filter.All(Of Integer)("Roles.RoleId", {1, 3}) And Builders(Of BsonDocument).Filter.Eq(Of Integer)("Roles.$.Organization.Id", 2) 

MongoShell:

db.test.find({$and: [{'Roles.RoleId': {$all: [1, 3]}}, {'Roles.Organization.Id': 2}]}) 

這是一個包容性查詢。所有的criteras必須是真實的。我一個人有角色3,但不是組織2,我不想要它

這是可能在一個單一的查詢?

謝謝

回答

0

結果我的查詢工作...我的實際數據不好。

VB.NET

Dim f As FilterDefinition(Of BsonDocument) = Builders(Of BsonDocument).Filter.All(Of Integer)("Roles.RoleId", {1, 3}) And Builders(Of BsonDocument).Filter.Eq(Of Integer)("Roles.$.Organization.Id", 2) 

MongoShell

db.test.find({$and: [{'Roles.RoleId': {$all: [1, 3]}}, {'Roles.Organization.Id': 2}]})