MongoDB 是一款非关系型数据库,以文档(Document)为单位存储数据。而文档中经常会包含数组(Array)类型的数据。那么在进行文档查询时,如何遍历这些数组呢?本文将介绍 MongoDB 中实现文档中数组的遍历方法,并提供相应示例代码。
MongoDB 文档与数组
在 MongoDB 中,文档使用 JSON 格式表示,其中的数组类型使用方括号 [] 表示。例如下面这个文档包含名字、年龄、爱好三个字段,其中爱好是一个字符串类型的数组:
{ "name": "Tom", "age": 20, "hobbies": ["reading", "swimming", "travelling"] }
数组查询运算符
MongoDB 提供了一些查询运算符 (Query Operators) 来进行数组的遍历和查询。这些运算符可以用在 find()
和 update()
等方法中。
$all 运算符
$all
运算符用于匹配包含所有指定元素的数组。例如,下面这个查询可以匹配包含 "reading" 和 "travelling" 两个元素的文档:
db.collection.find({ hobbies: { $all: ["reading", "travelling"] } })
$elemMatch 运算符
$elemMatch
运算符用于在数组中匹配所有满足给定条件的元素。例如,下面这个查询可以匹配包含 "reading" 这个元素,且同时年龄大于 18 的文档:
db.collection.find({ hobbies: "reading", { age: { $gt: 18}}})
$size 运算符
$size
运算符用于匹配数组长度。例如,下面这个查询可以匹配 hobbies 数组长度为 3 的文档:
db.collection.find({ hobbies: { $size: 3 }})
$slice 运算符
$slice
运算符用于控制返回数组的元素数量和起始位置。例如,下面这个查询返回第二个元素和第三个元素:
db.collection.find({},{ hobbies: { $slice: [1, 2]} })
示例代码
下面是一个具体的示例代码,首先是通过 $all
运算符匹配所有包含 "reading" 和 "travelling" 元素的文档,然后利用 $elemMatch
运算符匹配 hobbies 数组中 "reading" 并且年龄大于 18 的元素,最后利用 $slice
运算符返回 hobbies 数组的前两个元素。完整代码如下:
db.collection.find({ hobbies: { $all: ["reading", "travelling"] }, hobbies: { $elemMatch: { $eq: "reading", age: { $gt: 18 } } }, }, { hobbies: { $slice: 2 } })
通过上述代码,可查询出所有包含 "reading" 和 "travelling" 元素的文档,同时匹配 hobbies 数组中 "reading" 并且年龄大于 18 的元素,最后返回 hobbies 数组的前两个元素。
总结
本文介绍了 MongoDB 中实现文档中数组的遍历方法,并提供了相应的查询运算符示例。在实际应用中,开发者需要灵活运用这些查询运算符,根据实际需求来完成复杂的数组查询操作。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6488218c48841e98946a2b22