MongoDB是一个NoSQL数据库,它提供了对操作符类的广泛支持,以帮助检索数据。all(MongoDB中的所有运算符)的名字所示,它被用来从数据库集合中获取文件,如果它与数组字段中的所有值相匹配。此外,如果任何字段中存在嵌套数组,$all运算符也提供了匹配嵌套数组的支持。
在这篇文章中,我们将简要介绍$all操作符在MongoDB中的用法。
$all操作符如何在MongoDB中工作
如上所述,在$all操作符的帮助下,人们可以基于数组字段来获取文档。
为了更好地理解,让我们看一下$all操作符的语法。
{"field": {$all: ["value1", "value2"...]}}
这个操作符搜索指定的值,任何有确切值的字段的文件都会被检索到。然而,我们注意到,只有当所有的值都与文档中的数组字段的值相匹配时,**all的工作机制与and操作符可以用于多种数据类型,而$all只针对数组数据类型字段。
$all操作符在MongoDB中如何工作
在本指南中,将使用以下MongoDB实例。
- MongoDB数据库:本指南中使用的MongoDB数据库被命名为 "linuxhint"
- 集合:我们将 "项目"集合与 "linuxhint"数据库相关联。
以下文件驻留在 "projects"集合中。
> db.projects.find().pretty()


例1:$all操作符的基本用法
这个例子演示了**$all**操作符的基本用法;例如,下面提到的命令将在 "经理"字段中寻找完全匹配的数组值;只显示那些经理名字为 "Mike"和 "Sam"的文档。
> db.projects.find({managers: {$all: ["Mike", "Sam"]}}).pretty()

例2:在嵌套数组中使用$all操作符
如果文档包含嵌套数组,比如在我们的案例中,"硬件"项目包含一个经理人的嵌套数组,我们可以通过在$all操作符中指定嵌套数组来获取文档。下面提到的命令将获取有经理 "Alen"、"Sam"和 "Elon"的文档。
> db.projects.find({managers: {$all: [["Alen", "Sam"], "Elon"]}}).pretty()

人们注意到,如果你想只使用数组的嵌套部分;你也可以这样做,下面的命令将在这方面帮助你。
> db.projects.find({managers: {$all: [["Alen", "Sam"]]}}).pretty()

例3:使用$all操作符来匹配一个值
除了处理数组之外,$all运算符的使用还可以扩展到匹配文档中的值。在我们的例子中,下面提到的命令将得到那些 "cost"值等于 "5000"的文档。
> db.projects.find({cost: {$all: [5000]}}).pretty()

或者可以说,下面写的命令也会为你提供同样的结果。
> db.projects.find({cost: 5000}).pretty()

> db.mycollection.find().pretty()

结论
MongoDB提供了一个广泛的操作符列表,用于从任何Mongo数据库的集合中检索所需的文件。在这篇文章中,我们在MongoDB上下文中简要讨论了一个名为all还提供了支持,通过匹配任何值(除数组外)来获取文档。