强制C#MongoDB驱动程序通过点表示法生成“ $ elemMatch”

时间:2018-12-10 04:36:00

标签: mongodb mongodb-.net-driver azure-cosmosdb-mongoapi

C#MongoDB驱动程序会将基本数组查询转换为“点表示法”,但不幸的是CosmosDB doesn't support this syntax by default

我目前正在通过在查询中添加其他(无意义)条件来解决该问题,该条件强制使用$elemMatch,但我希望在可能的情况下在配置级别进行。

例如。

collection.Find(c => c.Items.Any(i => i.Status == 1));

将生成查询:

{"Items.Status": 1}

但我希望它生成:

{"Items": { "$elemMatch": { "Status": 1 } } }

1 个答案:

答案 0 :(得分:1)

您可以使用模型类从MongoDB .NET驱动程序使用通用的Builders类型来显式构建$elemMatch查询,请尝试:

var filter = Builders<YourModel>.Filter.ElemMatch(x => x.Items, item => item.Status == 1);
collection.Find(filter).ToList();