MongoDB 数据操作(二)数据查询(6)数组查询
in SQL with 0 comment, Views is 22

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

in SQL with 0 comment, Views is 22

上一篇:《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)嵌套集合查询》

Responses
选择表情