我有一个包含以下文档类型的集合:
{
field1: 1,
field2: "test1",
field3: [1,2,3]
}
假设我的收藏中有以下文件(忽略field1
和field2
而只考虑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]
查询此集合。
所以,我在集合中执行一个查询,这样我就可以获得查询数组中包含所有数组元素的所有文档。
在我的情况下,它应该返回文档doc2
和doc4
,因为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个文档答案 0 :(得分:0)
C#驱动程序中的运算符All
或MongoDb中的$all
会考虑所有元素,如文档中的here所述:
$ all运算符选择字段值所在的文档 包含所有指定元素的数组。
然后,假设元素3
和4
,运算符使用以下逻辑来考虑数组:the array contains elements 3 AND 4
。
如果您想考虑使用Query.In
的数组,我认为您应该使用$in
(有关3 OR 4
here的更多信息)。
<强>更新强>
在澄清之后,我注意到MongoDb网站上的this request。在该页面中,用户请求了一个功能,以便仅检索具有仅包含指定元素的数组的文档,但实际上这是不可能的。
不幸的是,我认为,这是MongoDb的限制,通常是NoSQL数据库的限制。