包含字符串数组的匹配文档,其中至少一个数组元素不是空字符串

时间:2019-06-24 15:31:14

标签: arrays mongodb filter

我的文档包含简单的字符串数组,而且似乎无法设置一个过滤器来恢复所有给定数组字段中至少包含一个不是“”元素字符串的文档。该文档包含6500个文档,其中3700个文档应满足上述条件(我通过拉出所有记录并在客户端执行筛选器进行检查)。

我主要在.NET中使用驱动程序,但我也对Compass中的过滤器进行了修改。使用驱动程序,我尝试了Ne,Not(Eq),AnyNe,Not(AnyEq),Nin [“”],Not(In [“”])。我想使用ElemMatch,但它似乎是针对文档数组而不是字符串数组的,因为您必须指定一个字段名,在这种情况下不存在。我还尝试设置.Where过滤器,该过滤器循环查找数组中的任何非空字符串,但在运行时引发异常(我在VB中进行编码)。

Builders(Of BsonDocument).Filter.AnyNe(Of String)("field", String.Empty)

我希望上面的过滤器(“字段”是对字符串数组的引用)会带回3700个文档,但我得到0。

我想我显然是在这里遗漏什么的人,因为这似乎不应该构成一个困难的查询/过滤器。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

对于像我一样困惑的任何人:

我之前提到ElemMatch似乎适用于文档数组,但是显然如果您放弃使用Builder类并手动键入查询,则实际上可以在.NET中使用ElemMatch来查询一个简单的String Array字段,至少一项不是空字符串“”。

正确/有效的示例:{“ [array_field_name]”:{$ elemMatch:{$ ne:“”}}}

如果任何人都可以告诉我如何使用Builder类创建该示例,那将很棒。