上一篇我们讲了window下如何安装mongodb,那这一篇我们趁热打铁,这就入门吧。打开cmd,进入mongodb安装路径下的bin目录,然后输入mongo命令进入交互环境。
1、查看所有数据库
(1)命令格式:show databases;
(2)结果:
2、 创建数据库
(1)命令格式:use testDatabase;
(2)说明:use + dbname命令,即是切换到某一数据库,也是创建一个数据库的命令。
(3)结果:
3、查看testDatabase下的所有集合
(1)命令格式:show collections;
(2)说明:在MongoDB中我们不叫表,称之为集合。但其实就是关系型数据库中表的概念。
4、向testCollection集合中插入文档
(1)命令格式:db.testCollection.insert({json串});
(2)举例:
db.testCollection.insert({"name":"张三","sex":"男","age":20,"score":90});
db.testCollection.insert({"name":"李四","sex":"女","age":23,"score":80});
db.testCollection.insert({"name":"王五","sex":"男","age":25,"score":84});
db.testCollection.insert({"name":"赵六","sex":"女","age":21,"score":95});
db.testCollection.insert({"name":"钱七","sex":"女","age":20,"score":78});
db.testCollection.insert({"name":"王八","sex":"男","age":23,"score":95});
db.testCollection.insert({"name":"秦九","sex":"男","age":24,"score":90});
(3)说明:MongoDB中不叫记录,叫文档,所有的文档都是JSON格式。
(4)结果:
5、查看testCollection集合中所有文档
(1)命令格式:db.testCollection.find();
(2)说明:当然我们也可以使用db.testCollection.find().pretty();以更好的排版显示结果。
(3)结果:
6、 删除一个文档
(1)需求:删除名字为张三的这条文档。
(2)命令格式:db.testCollection.remove({"name":"张三"});
(3)结果:
7、关系运算
7.1、找出成绩大于94分的学生
(1)命令格式:db.testCollection.find({“score”:{“$gt”:94}});
(2)结果:
7.2、找出年龄小于21岁的学生
(1)命令格式:db.testCollection.find({"age":{"$lt":21}});
(2)结果:
7.3、找到姓名等于李四的学生
(1)命令格式:db.testCollection.find({"name":"李四"}); || db.testCollection.find({"name":{"$eq":"李四"}});
(2)结果:
7.4、找到年龄大于等于24的学生
(1)命令格式:db.testCollection.find({“age”:{“$gte”:24}});
(2)结果:
7.5、找到分数小于等于90分的学生
(1)命令格式:db.testCollection.find({“score”:{“$lte”:90}});
(2)结果:
7.6、找到性别不为男的学生
(1)命令格式:db.testCollection.find({“sex”:{“$ne”:”男”}});
(2)结果:
8、findOne()语法
(1)需求:返回性别为女的第一个文档
(2)命令格式:db.testCollection.findOne({“sex”:”女”});
(3)结果:
9、查询记录总数
(1)命令格式:db.testCollection.count();
(2)结果:
10、限制返回记录的起点
(1)命令格式:db.testCollection.find().skip(3).limit(5);
(2)结果:
11、结合运算
11.1、找到性别为男,并且分数在90分以上的学生
(1)命令格式:db.testCollection.find({“sex”:”男”,”score”:{“$gte”:90}});
(2)结果:
11.2、找到年龄在21岁以下或者是24岁以上的学生
(1)命令格式:db.testCollection.find({$or:[{"age":{"$lte":21}},{"age":{"$gte":24}}]});
(2)结果:
12、模运算
(1)需求:找到年龄对20进行模运算余1的学生
(2)命令格式:db.testCollection.find({“age”:{“$mod”:[20,1]}});
(3)结果:
13、范围查询
13.1、找到姓名是李四、王五的信息
(1)命令格式:db.testCollection.find({“name”:{“$in”:[“张三”,”李四”]}});
(2)结果:
13.2、找到姓名非李四、王五的信息
(1)命令格式:db.testCollection.find({“name”:{“$nin”:[“张三”,”李四”]}});
(2)结果:
14、数组
14.1、向testCollection集合中插入数组数据
db.testCollection.insert({"name":"数组1","sex":"男","age":24,"score":90,"course":["语文","数学","英语","物理","生物","化学"]});
db.testCollection.insert({"name":"数组2","sex":"男","age":23,"score":78,"course":["语文","化学"]});
db.testCollection.insert({"name":"数组3","sex":"男","age":24,"score":87,"course":["语文","数学","英语","化学"]});
db.testCollection.insert({"name":"数组4","sex":"男","age":22,"score":92,"course":["语文","物理","生物","化学"]});
db.testCollection.insert({"name":"数组5","sex":"男","age":21,"score":90,"course":["语文","数学","英语"]});
14.2、数组$all操作
(1)需求:查找所有学习了语文和数学的学生
(2)命令格式:db.testCollection.find({“course”:{“$all”:[“语文”,”数学”]}});
(3)结果:
14.3、数组下标索引查询(下标从0开始)
(1)需求:查询第二门课学数学的学生
(2)命令格式:db.testCollection.find({“course.1”:”数学”});
(3)结果:
14.4、数组$size操作
(1)需求:查询只选了两门课的学生
(2)命令格式:db.testCollection.find({“course”:{“$size”:2}});
(3)结果:
14.5、数组$slice操作
14.5.1、只要展示两门课程,即不需要列出所有的课程
(1)命令格式:db.testCollection.find({},{“course”:{“$slice”:2}});
(2)结果:
14.5.2、只要展示后两门课程
(1)命令格式:db.testCollection.find({},{“course”:{“$slice”:-2}});
(2)结果:
14.5.3、只要展示中间2到3门的课程
(1)命令格式:db.testCollection.find({},{“course”:{“$slice”:[1,1]}});
(2)结果:
说明:第一个数表示跳过的数据量,第二个数表示返回的数据量
注意:好像前面必须跟上slice操作的使用,好像必须跟上一个{}的操作,即与上一个其它条件,然后查询出来的结果,有course成员的文档,则只显示两项数据;没有course成员的文档,取决于与上的这个条件。
15、嵌套查询
15.1、向testCollection集合中插入测试数据
db.testCollection.insert({"name":"嵌套集合1","sex":"男","age":22,"parent":[{"name":"父亲","age":40},{"name":"母亲","age":37}]});
db.testCollection.insert({"name":"嵌套集合2","sex":"女","age":21,"parent":[{"name":"父亲","age":41},{"name":"母亲","age":39}]});
15.2、找到性别为男,父亲年龄为40的学生
(1)命令格式:
db.testCollection.find(
{
"$and":
[
{"sex":"男"},
{"parent":{
"$elemMatch":{"age":40}
}
}
]
}
).pretty();
(2)结果:
16、成员判断
使用$exists判断某个成员的存在与否(true:存在;false:不存在)
(1)需求:找出包含parent成员的文档
(2)命令格式:db.testCollection.find({“parent”:{“$exists”:true}});
(3)结果:
17、Where条件查询
17.1、查找年龄小于21岁的学生
(1)命令格式(以下任意一种):
①db.testCollection.find(“this.age<21”).pretty(); |
②db.testCollection.find({“$where”:”this.age<21”}).pretty(); |
③db.testCollection.find({“age”:{“$lt”:21}}).pretty(); |
④db.testCollection.find(function(){return this.age<21}).pretty(); |
⑤db.testCollection.find({“$where”:function(){return this.age<21}}).pretty(); |
(2)结果:
17.2、查找年龄小于22岁,大于20岁的学生
(1)命令格式(以下任意一种):
①db.testCollection.find({“$and”:[{“$where”:”this.age<22”},{“$where”:”this.age>20”}]}).pretty(); |
②db.testCollection.find({“$and”:[{“age”:{“$lt”:22}},{“age”:{“$gt”:20}}]}).pretty(); |
(2)结果:
18、正则运算实现模糊查询
(1)基础语法:db.testCollection.find({“成员名”:正则表达式}).pretty();
(2)复杂语法:db.testCollection.find({“成员名”:{“$regex”:表达式}}).pretty();
例:查找姓”张”的学生
db.testCollection.find({“name”:/张/}).pretty(); |
db.testCollection.find({“name”:{“$regex”:/张/}}).pretty(); |
19、数据排序
19.1、 按成绩升序排序(1:升序;-1:降序)
(1)命令格式:db.testCollection.find().sort({“score”:1});
(2)结果:
19.2、自然排序(当初插入数据库的先后顺序)
(1)命令格式:db.testCollection.find().sort({“$natural”:1});
(2)结果:
20、更新操作
语法:db.集合名.update({条件},{修改后的内容},boolean1,boolean2);
说明:
(1)第一个boolean1,true:当数据库中没有满足”{条件}”的文档时,增加文档;false:不增加。
(2)第二个boolean2,true:修改所有满足”{条件}”的文档;false:只修改第一条。
例:将年龄为20岁的学生的成绩修改为95分
db.testCollection.update({“age”:20},{“$set”:{“score”:95}},false,true).pretty(); |
21、删除数据
语法:db.集合名.remove(第一个可选参数,第二个可选参数);
说明:
(1)两个参数都不写,则删除集合中所有的文档;
(2)只写第一个参数{“条件”},表示删除所有符合条件的文档,因为此时第二个参数默认为false;
(3){“条件”,true},表示删除所有符合条件中的第一条文档。