查询MongoDB C#中的数组

时间:2013-11-20 12:18:04

标签: c# mongodb

我有一个包含以下文档类型的集合:

{
 field1: 1,
 field2: "test1",
 field3: [1,2,3]
}

假设我的收藏中有以下文件(忽略field1field2而只考虑field3

收集:

doc1-  {...
        field3: [3,4,5,6]
       }
doc2-  {...
        field3: [3,4]
       }
doc3-  {...
        field3: [1,2,3]
       }
doc4-  {...
        field3: [3,6,7]
       }

现在,我在field3上使用值[3,4,6,7]查询此集合。

所以,我在集合中执行一个查询,这样我就可以获得查询数组中包含所有数组元素的所有文档。 在我的情况下,它应该返回文档doc2doc4,因为field3的所有元素都存在于查询中,但Query.ALL不起作用。

如何在MongoDB查询中完成此操作?

(编辑更清晰)

为什么所有人都无法工作?

EX:如果我的提问数组是[3,4],当我使用Query.All(“field3”,new BsonValue [] {3,4})时, 我将获得所有带有“field3”的文档,其中包含提问数组中的所有元素,即3和4.因此,在这种情况下,我的结果文档将是上面示例中的doc1和doc2。但我的要求只是doc2。因为我的文档的所有元素都应该在我的查询数组中而不是其他方式。

为什么$ in不起作用? 如果在文档中存在至少一个quetiong数组元素,则将其检索。 例如:提问数组是[3,4],当我使用Query.In(“field3”,new BsonValue [] {3,4})时, 结果将是集合doc1,doc2,doc3和doc4

的所有4个文档

1 个答案:

答案 0 :(得分:0)

看看this question

C#驱动程序中的运算符All或MongoDb中的$all会考虑所有元素,如文档中的here所述:

  

$ all运算符选择字段值所在的文档   包含所有指定元素的数组。

然后,假设元素34,运算符使用以下逻辑来考虑数组:the array contains elements 3 AND 4

如果您想考虑使用Query.In的数组,我认为您应该使用$in(有关3 OR 4 here的更多信息)。

<强>更新

在澄清之后,我注意到MongoDb网站上的this request。在该页面中,用户请求了一个功能,以便仅检索具有仅包含指定元素的数组的文档,但实际上这是不可能的。

不幸的是,我认为,这是MongoDb的限制,通常是NoSQL数据库的限制。