Aar*_*ini 5 c# arrays json mongodb mongodb-.net-driver
我正在尝试使用 C# 在 MongoDB 中的嵌套数组文档中实现文本搜索功能。我有以下格式的 MongoDB 集合。
{
"_id" : ObjectId("56c6f03ffd07dc1de805e84f"),
"Customers" : {
"Contact" : [
[
{
"FirstName" : "Swetha",
"LastName" : "DevAnand"
}
]
]
}
}
Run Code Online (Sandbox Code Playgroud)
蒙戈查询:
db.test_collection.find({"Customers.Contact":{$elemMatch:{$elemMatch:{LastName: /.*Dev.*/}}}});
Run Code Online (Sandbox Code Playgroud)
在上面的 MongoDB 查询中,我想使用 C# 对 BSON 文档的最内层数组进行 LIKE 搜索。但是,我已经在 Mongo Query 中使用嵌套的 $elemMatch 实现了这一点。但是在 C# 中尝试做同样的事情时,它需要每个 ElemMatch 查询的字段名。在上面的例子中,最里面的 Contact 字段数组没有任何明确的字段名。到目前为止,我已经尝试了以下所有 C# 代码来实现该场景,但它们都没有帮助。
var regex = new BsonRegularExpression(searchVal,"i");
query = Query.And(Query.ElemMatch("Customers.Contact", Query.And(Query.ElemMatch("LastName", Query.Matches("LastName", regex)))));
query = Query.And(Query.Matches("Customers.Contact.$.LastName",regex));
query = Query.And(Query.ElemMatch("Customers.Contact.$", Query.EQ("LastName", regex)));
query = Query.And(Query.ElemMatch("Customers.Contact.$", Query.Matches("LastName", regex)));
query = Query.And(Query.ElemMatch("Customers.Contact", Query.And(Query.ElemMatch("$", Query.EQ("LastName", regex)))));
Run Code Online (Sandbox Code Playgroud)
任何帮助都非常感谢。
经过一周的奋斗,找到了办法。实现上述 MongoDB 查询的最佳方法是将其反序列化为 BsonDocument,该 BsonDocument 将作为过滤器传递给 FindAsync。
var bQuery = "{'Customers.Contact':{$elemMatch:{$elemMatch:{LastName: /.*Dev.*/}}}}";
var filter = MongoDB.Bson.Serialization.BsonSerializer.Deserialize<BsonDocument>(bQuery);
var result = collection.FindSync(filter).ToList();
Run Code Online (Sandbox Code Playgroud)
感谢萨利姆先生。请参阅以下链接了解更多详情。 如何用C#实现MongoDB嵌套$elemMatch查询
| 归档时间: |
|
| 查看次数: |
7586 次 |
| 最近记录: |