【发布时间】:2021-07-09 00:42:24
【问题描述】:
免责声明:我是一个完全的菜鸟,所以请温柔。
我正在尝试重构一个返回 IMongoQuery 对象的方法,该方法的查询效率不是很高。我已经粘贴了下面的查询(原始的和想要的)。我尝试了各种构建查询的方法,但以我有限的知识,我知道如何做的最好方法是将其手动创建为 BsonDocument;但后来我不知道如何把它变成一个 IMongoQuery。
谁能给我一些关于我应该采取的最佳方式的建议?
原始查询
{
"$or": [{
"$and": [{
"$or": [{
"identifier": {
"$elemMatch": {
"code": "CustomerName1",
"system": "NameSystem"
}
}
}, {
"identifier.0": {
"$exists": false
},
"identifier.code": "CustomerName1",
"identifier.system": "NameSystem"
}
]
}, {
"$or": [{
"identifier": {
"$elemMatch": {
"code": "CustomerCode1",
"system": "CodeSystem"
}
}
}, {
"identifier.0": {
"$exists": false
},
"identifier.code": "CustomerCode1",
"identifier.system": "CodeSystem"
}
]
}
]
}, {
"$and": [{
"$or": [{
"identifier": {
"$elemMatch": {
"code": "CustomerName2",
"system": "NameSystem"
}
}
}, {
"identifier.0": {
"$exists": false
},
"identifier.code": "CustomerName2",
"identifier.system": "NameSystem"
}
]
}, {
"$or": [{
"identifier": {
"$elemMatch": {
"code": "CustomerCode2",
"system": "CodeSystem"
}
}
}, {
"identifier.0": {
"$exists": false
},
"identifier.code": "CustomerCode2",
"identifier.system": "CodeSystem"
}
]
}
]
}
]
}
所需查询
{
"$or": [{
"$and": [{
"$or": [{
"identifier": {
"$elemMatch": {
"code": {
"$in": ["CustomerName1", "CustomerName2"]
},
"system": "NameSystem"
}
}
}, {
"identifier.0": {
"$exists": false
},
"identifier.code": {
"$in": ["CustomerName1", "CustomerName2"]
},
"identifier.system": "NameSystem"
}
]
}, {
"$or": [{
"identifier": {
"$elemMatch": {
"code": {
"$in": ["CustomerCode1", "CustomerCode2"]
},
"system": "CodeSystem"
}
}
}, {
"identifier.0": {
"$exists": false
},
"identifier.code": {
"$in": ["CustomerCode1", "CustomerCode2"]
},
"identifier.system": "CodeSystem"
}
]
}
]
}
]
}
【问题讨论】:
-
我不知道
IMongoQuery是什么(我从未使用过 Mongo 的那个方面)但你可以使用BsonDocument代替FilterDefinition<T>:mongodb.github.io/mongo-csharp-driver/2.4/apidocs/html/…