1. 1. MongoDB 集合操作
  2. 2. MongoDB 文档操作

MongoDB 集合操作

1.显示创建集合

db.createCollection();

2.查看集合

show collections
show tables

3.隐式创建

db.class.insert({‘classId’:1,’className’:”三年二班”});

表示往 class 集合中插入一个文档(班级编号为1,班级名称为三年二班)。
本质是,往一个集合中插入一条数据,如果这个集合不存在,MongoDB 会自动帮我们创建该集合

4.删除集合

db.collectionName.drop();

MongoDB 文档操作

1.文档插入
MongoDB 中数据插入,指的是将创建的文档插入到指定的集合

db.collectionName.insert(doc);

如果集合不存在,则创建该集合。doc 可以是一个集合或者一个集合数组

_id 这是 MongoDB 自动生成的一个全球唯一主键,用于区分文档。其包含四部分:时间戳机器PID(进程号)计数器

插入多个文档:

2.文档删除

db.collectionName.remove(where,[justOne]);

where 代表删除条件,当 where{}代表删除所有文档。
justOne 默认情况下为 false,代表匹配条件的文档有多个的时候,删除所有匹配文档。如果设置为 true1(设置其他非0的整数也可以),代表仅仅删除一个文档。

删除 school 数据库 student 集合里名字(stu_name)为王五的文档:

db.student.remove({"stu_name":"王五"});

删除 school 数据库 student 集合里班级编号(class_id)为1的一个集合:

db.student.remove({"class_id":1},2);

虽然满足条件的文档很多,但是仅仅删除了其中一个文档

3.文档修改

db.collectionName.update(query,update,upset,multi);

collectionName:集合名字

query:修改的条件,类似 SQL 的 where 语句。
update:更新命令,类似 SQL 的 set 语句。
upset:可选,默认为 false,如果未发现符合更新条件的数据内容,是否执行插入操作,1或者 true 代表进行插入,0或者 false 代表不插入。
multi:可选,MongoDB 默认为 false。是否进行多行更新。1或者 true 进行·多行更新,0或者false代表不更新`。

关于 update 格式有两种形式

  • 直接赋值使用 {set:{}}
    {set:{“name”:”张三”}},将名字改为张三
  • 进行算术运算使用 {inc:{}}
    {inc:{“age”:3}},将 age 增加3
    {$inc:{“age”:-3}},将 age 减3

实例用法:
1、更新文档中不存在字段

# 更新学生编号(stu_id)为2文档,为其添加一个字段年龄(age)为13
db.student.update({"stu_id":2},{$set:{"age":13}});

2、批量更新文档中不存在字段

# 更新学生,将其年龄(age不存在)设置为12
db.student.update({},{$set:{"age":12}},0,1);

3、批量指定字段更新

# 将班级编号为2的所有学生,年龄(age)增加1
db.student.update({"class_id":1},{$inc:{"age":1}},0,1);

4.文档查询

  • 查询集合中的所有文档

    db.collectionName.find();

    为了便于查找,先向其中插入一些数据

    for (var i = 1;i < 20;i ++){
    db.student.insert({"stu_id":i,"stu_name":"李" + i});
    }
    db.student.find();

  • 查询集合中的第一个文档

    db.collectionName.findOne();

条件查询:

项目 价格 数量
等于(=) / 查找名字为李四的所有学生:db.student.find({“name”:”李四”});
等于(!=) $ne 查找名字不为李四的所有学生:db.student.find({“name”:{‘$ne:”李四”}’}});
大于(>) $gt 查找所有年龄大于5的学生:db.student.find({“age”:{$gt:5}});
小于(<) $lt 查找所有年龄小于15的学生:db.student.find({“age”:{$lt:15}});
大于等于(>=) $gte 查找所有年龄大于或等于5的学生:db.student.find({“age”:{$gte:5}});
小于等于(>=) \ | $lte 查找所有年龄小于或等于15的学生:db.student.find({“age”:{$lte:15}});
与(and) / 查找所有年龄小于或等于15且班级编号为1的所有学生:db.student.find({“age”:{$lte:15},”class_id”:1});
或(or) {$or:[{条件1},{条件2}]} 查找所有年龄小于或等于15或者班级为1的所有学生:db.student.find({$or:[{“age”:{$lte:15}},{“class_id”:1}]});
非或(nor) {$nor:[{条件1},{条件2}]} 条件1不能满足和条件2不能满足
集合运算符(in) $in 查找年龄12或者13或者14的学生:db.student.find({“age”:{$in:[12,13,14]}});
集合运算符(all) $all 查找爱好包含football,和basketBall的所有学生:db.student.find({“hobby”:{$all:[“football”,”basketBall”]}});
是否存在(exists) $exists 查询存在hooby的所有学生:db.student.find({hobby:{$exists:1}});{$exists:0}代表不存在

5.统计、排序、分页

  • 统计

    db.collectionName.count();
    db.collectionName.find().count();

  • 排序

    # key升序排列
    db.collectionName.find().sort({key:1});

# key降序排列
db.collectionName.find().sort({key:-1});

  • 分页
    db.collectionName.find().skip(n).limit(m);
    collectionName 中第 n 个文档开始读取,共读取 m 个文档,需要注意的是 MongoDBn 是从 0 开始的。可以类比 MySQLlimit 方法。n 相当于 limit 中的第一个方法,m 相当于 limit 中第二个参数,当使用分页时候,若使用 count,需要注意 MongoDB 统计数量默认是忽略分页的

    count 传递一个参数 count(flag)flag0(默认情况为0)忽视分页flag1不忽视分页
    student 中取出6~12条数据
    db.student.find().skip(6).limit(6);

    从集合 student 中取出第一条数据
    db.student.find().skip(0).limit(1);

6.投影查询
在 MongoDB 中,每次查询都是将所有的键都显示出来了,怎样只让部分键显示呢?这就要用到投影查询。
比如,我只让集合 student 查询结果中 stu_name 显示。

db.student.find({},{_id:0,stu_id:0});


MongoDB 中,find 函数里面的第二个参数是用来控制让哪些键显示或者不显示0不显示1显示默认情况下为显示