在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,我不想要它
这可以在一个查询中实现吗?
谢谢
答案 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}]})