我正在尝试使用C#在MongoDB中使用嵌套数组文档实现文本搜索功能 . 我有一个以下格式的MongoDB集合 .
{
"_id" : ObjectId("56c6f03ffd07dc1de805e84f"),
"Customers" : {
"Contact" : [
[
{
"FirstName" : "Swetha",
"LastName" : "DevAnand"
}
]
]
}
}
Mongo查询:
db.test_collection.find({"Customers.Contact":{$elemMatch:{$elemMatch:{LastName: /.*Dev.*/}}}});
与上面的MongoDB查询一样,我想使用C#对BSON文档的最内层数组进行LIKE Search . 但是,我在Mongo Query中使用嵌套的$ elemMatch实现了这一点 . 但是在尝试在C#中执行相同操作时,它需要每个ElemMatch Query的字段名 . 在上述情况下,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)))));
任何帮助都非常感谢 .
2 回答
我不了解您的背景 - 所以请尽量帮助您 . 请注意,contact是一个列表而不是数组 . 这将帮助您构建自己的过滤器表达式
经过一周的奋斗,找到了一条路 . 实现上述MongoDB查询的最佳方法是将其反序列化为BsonDocument,然后将其作为过滤器传递给FindAsync .
感谢Mr.Saleem . 有关详细信息,请参阅以下链接 . How to implement MongoDB nested $elemMatch Query in C#