2016-05-12 74 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}]})