具有多个包含Criteras的MongoDB嵌套搜索

时间:2016-05-12 16:49:07

标签: c# vb.net mongodb search

在MongoDB中,考虑个人文档的各种实例,结构如下:

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和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}]})

这是一个包容性查询。所有的标准都必须是真的。我是一个人有角色3但不是组织2,我不想要它

这可以在一个查询中实现吗?

谢谢

1 个答案:

答案 0 :(得分: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}]})