使用$ all和match模式

时间:2016-04-19 19:57:12

标签: c# arrays mongodb

我在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对象并为其分配我的查询的字符串表示。这是唯一的方法吗?

0 个答案:

没有答案