在OData ElemMatch $过滤器查询期间,MongoDB PredicateTranslator失败

时间:2018-03-30 01:08:08

标签: c# mongodb linq odata iqueryable

我正在编写OData v4服务。我正在使用MongoDB作为我的后端。我可以使用FilterDefinition<T>轻松编写ElemMatch查询来解决我的问题:

var eqF = Builders<IndicesType>.Filter.Eq(x => x.Value, "Foo");
var elemF = Builders<DocumentType>.Filter.ElemMatch(_ => _.Indices, eqF);

我尝试使用IQueryable方法从我的存储库中返回IMongoQueryableIMongoCollection#AsQueryable()。当我尝试在我的端点上使用以下OData过滤器时,C#驱动程序抛出InvalidOperationException:

$filter=Indices/any(i: i/Value eq 'Foo')

异常消息是

"IIF(({document}{i} == null), null, Convert(Any({document}{i}.Where((IIF(({document} == null), null, {document}{k}) == \"Foo\"))))) is not supported."

我认为这个操作将受到新驱动程序广泛的LINQ支持的支持。是否有实现此计划或我是否需要编写转换层以将OData查询转换为Mongo过滤器或BsonDocument并手动运行查询?

为了进行测试,将整个集合转换为IEnumerable可以进行适当的过滤,但是当集合大小增加时,这个解决方案显然不适用于生产。

我还应该考虑其他解决方法吗?

修改:在这里找到了JIRA票证https://jira.mongodb.org/browse/CSHARP-1771,如果有人想要创建驱动程序的自定义版本,那么它实际上有一个解决方法。

0 个答案:

没有答案