MongoDB 数据操作(二)数据查询(6)数组查询

本文介绍了MongoDB中针对数组的数据查询,包括如何保存和更新包含数组的字段,以及使用如$all、$in、$elemMatch等运算符进行匹配。还探讨了如何通过索引操作查询数组内容,并展示了如何控制返回的数组元素数量和顺序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

来源:我的博客站 OceanicKang |《MongoDB 数据操作(二)数据查询(6)数组查询》

上一篇:《MongoDB 数据操作(二)数据查询(5)范围查询》

在 MongoDB 中支持数组保存,而一旦支持数组保存,就需要针对于数组的数据进行匹配

保存数组内容

> db.students.update({"name":"张三"}, {"$set": {"course": ["语文", "数学", "英语"]}});
> db.students.update({"name":"李四"}, {"$set": {"course": ["物理", "化学", "生物"]}});
> db.students.update({"name":"王五"}, {"$set": {"course": ["地理", "政治", "历史"]}});
> db.students.update({"name":"赵六"}, {"$set": {"course": ["语文", "政治", "历史"]}});
> db.students.update({"name":"燕七"}, {"$set": {"course": ["物理", "生物", "地理"]}});
> db.students.update({"name":"孙八"}, {"$set": {"course": ["数学", "化学", "生物"]}});
> db.students.update({"name":"刘九"}, {"$set": {"course": ["政治", "化学", "生物"]}});
> db.students.insert({"name":"牛十", "course": ["物理", "生物"]});

对原有数据进行更新,添加 course 字段,值为数组

而后需要针对数组进行判断,可以使用几个运算符:$all$size$slice$elemMathch

查询同时参加语文和数学课程的学生:{ "$all": [内容1, 内容2, ...] }

> db.students.find({"course": {"$all": ["语文", "数学"]}}).pretty();

1.png

虽然 $all 不仅可以用于数组上,还能用于一个数据的匹配上

查询学生地址是“鄞州区”的信息

> db.students.find({"address": {"$all": ["鄞州区"]}}).pretty();

2.png

在集合中保存的数组信息,可以利用索引操作,用 key.index 的方式来定义索引

查询数组中第二个内容(index = 1)为数学的信息

> db.students.find({"course.1": "数学"}).pretty();

3.png

查询只参加两门课程的学生

使用 $size 来进行数量控制

> db.students.find({"course": {"$size": 2}}).pretty();

4.png

返回年龄为 19 的所有学生的信息,但是要求只显示前两门参加课程

在进行数据查询的时候,只要是内容符合条件,数组的内容就全部显示出来了

现在希望可以控制数组返回的数量,使用 $slice 进行控制

> db.students.find({"age": 19}, {"course": {"$slice": 2}}).pretty();

5.png

如果设置负数,可以取出后两门的信息

返回年龄为 19 的所有学生的信息,但是要求只显示后两门参加课程

> db.students.find({"age": 19}, {"course": {"$slice": -2}}).pretty();

6.png

返回年龄为 19 的所有学生的信息,但是要求显示跳过第一门后的课程,返回一门即可

> db.students.find({"age": 19}, {"course": {"$slice": [1, 1]}}).pretty();

[1, 1]:第一个数据表示跳过的数据量,第二个数据表示返回的数据量

7.png

下一篇:《MongoDB 数据操作(二)数据查询(7)嵌套集合查询》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值