我在MongoDB中有一个集合,每个文档都包含一个名为“tags”的数组,这是一个不同的小写字符串数组。我有一个独特的字符串数组(从现在开始称为T)。我的查询查找T中每个元素的“tags”数组中包含类似条目的每个文档。
这是有效的查询:
{
"tags" : {
"$all" : [
/foo/,
/bar/
]
}
}
如何从C#执行此查询?
以下是我提出的查询:
return from item in items.AsQueryable()
where T.All(t => item.Tags.Contains(t))
select item;
这几乎是我想要的。问题是这使用了相等运算符,因此item.Tags和T中的匹配元素必须相同:
{
"tags" : {
"$all" : [
"foo",
"bar"
]
}
}
我的另一次尝试看起来像这样:
return from item in items.AsQueryable()
where T.All(t => item.Tags.All(tag => tag.Contains(t))
select item;
然而,这导致了一个不受支持的操作异常,我猜是因为$ all中的$ regex是不允许的。
更新
我可以使用FilterDefinition对象并为其分配我的查询的字符串表示。这是唯一的方法吗?