一:安装并运行:
这里我安装的是windows版本的
下载地址:https://fastdl.mongodb.org/win32/mongodb-win32-x86_64-2008plus-ssl-3.2.9-signed.msi
配置环境变量:
在磁盘新建MongoDB所在的数据库目录
D:\MongoDB\db
打开CMD运行初始化数据库并运行Mongo服务
mongod.exe --dbpath D:\MongoDB\db
新建另外一个CMD窗口,输入mongo.exe,就代表已经连上数据库了
二:常用的基础操作
1 常用的增删查改
use mldn; //使用一个数据库
use.createCollection("emp"); //创建一个集合,这时候mldn数据库才正式创立
show collections; //查看所有的集合
db.dept.find(); //查询所有的数据,语法:db.集合名称.find({若干条件})
var deptData = {
"deptno":20,
"dname":"研发部",
"loc":"深圳",
"count":20,
"avg":8000.0
};
db.dept.insert(deptData);
var deptData = {
"deptno":30,
"dname":"市场部"
};
db.dept.insert(deptData); //可以添加不规则数据
在MongoDB集合中的每一行记录都会自动的生成一个“"_id" : ObjectId("55949a13eecd74894d19d8dc")”数据,
这个数据组成是:“时间戳+ 机器码+ PID + 计数器”,这个ID的信息是MongonDB数据自己为用户生成的。
db.dept.findOne(); //查看一列数据
db.dept.remove({"_id" : ObjectId("57d26fd0bac41956727a31b6")}) ; //通过ID删除数据
var deptData = {"deptno" : 50 ,"dname" : "乞讨部" ,"loc" : "家里蹲" ,"count" : 60 ,"avg" : 9000.0} ;
db.dept.update({ "_id" : ObjectId("57d27800869687df9a7b5941")},deptData) ; //修改数据
db.dept.drop(); //删除集合
db.dropDatabase() //删除数据库
db.dept.find({"deptno":20}); //查看deptno为20的数据
db.dept.find({"deptno":20},{"_id":0}); //查看deptno为20的数据,但是不显示_id这列,不想显示为0,想显示为1,换成findOne的话则就只查第一列数据
区别如图
2 关系运算
在MongoDB里面支持的关系查询操作:大于($gt)、小于($lt)、大于等于($gte)、小于等于($lte)、不等于($ne)、等于(key:value、$eq)
首先准备这些数据
db.students.drop() ;
db.students.insert({"name":"张三","sex":"男","age":19,"score":89,"address":"海淀区"}) ;
db.students.insert({"name":"李四","sex":"女","age":20,"score":59,"address":"朝阳区"}) ;
db.students.insert({"name":"王五","sex":"女","age":19,"score":99,"address":"西城区"}) ;
db.students.insert({"name":"赵六","sex":"男","age":20,"score":100,"address":"东城区"}) ;
db.students.insert({"name":"孙七","sex":"男","age":19,"score":20,"address":"海淀区"}) ;
db.students.insert({"name":"王八","sex":"女","age":21,"score":0,"address":"海淀区"}) ;
db.students.insert({"name":"刘九","sex":"男","age":19,"score":70,"address":"朝阳区"}) ;
db.students.insert({"name":"钱十","sex":"女","age":21,"score":56,"address":"西城区"}) ;
db.students.find({"score":{"$gte":60}}).pretty() ; //查询成绩大于或等于60分的学生
db.students.find({"score":{"$gte":60},"age":{"$gt":19}}).pretty() ; //查询成绩大于或等于60分并且年龄大于19岁的学生
db.students.find({"name":{"$ne":"王五"}}).pretty() ; //查询姓名不是王五的学生
3 逻辑运算
逻辑运算主要就是三种类型:与($and)、或($or)、非($not、$nor)
db.students.find({"age" : {"$gte":19 , "$lte" : 20}}).pretty() ; //查询19~20岁的学生
db.students.find({"$or" : [{"age" : {"$gt":19}} , {"score" : {"$gt":90}}]}).pretty() ; //查询年龄大于19岁,或者成绩大于90分的学生信息
db.students.find({"$nor" : [{"age" : {"$gt":19}} , {"score" : {"$gt":90}}]}).pretty() ; //求反操作
在这几个逻辑运算之中,与的连接最简单的,而或的连接需要为数据设置数组的过滤条件。
4 求模
db.students.find({"age" : {"$mod" : [20,1]}}).pretty() ; //
5 范围查询
db.students.find({"name" : {"$nin" : ["张三","李四","王五"]}}).pretty() ; //类似not in();
6 数组查询
插入数据测试
db.students.insert({"name":"谷大神-A","sex":"男","age":19,"score":89,"address":"海淀区","course" : ["语文","数学","英语","音乐","政治"]}) ;
db.students.insert({"name":"谷大神-B","sex":"男","age":19,"score":89,"address":"海淀区","course" : ["语文","数学"]}) ;
db.students.insert({"name":"谷大神-C","sex":"男","age":19,"score":89,"address":"海淀区","course" : ["语文","数学","英语"]}) ;
db.students.insert({"name":"谷大神-D","sex":"男","age":19,"score":89,"address":"海淀区","course" : ["英语","音乐","政治"]}) ;
db.students.insert({"name":"谷大神-E","sex":"男","age":19,"score":89,"address":"海淀区","course" : ["语文","政治"]}) ;
查询成绩包含语文和数学成绩的学生
db.students.find({"course" : {"$all" : ["语文","数学"]}}).pretty() ;
查询数组中第二个内容(index = 1,索引下标从0开始)为数学的信息
db.students.find({"course.1" : "数学"}).pretty() ;
查询出只参加两门课程的学生
db.students.find({"course" : {"$size" : 2}}).pretty() ;
返回年龄为19岁所有学生的信息,但是要求只显示两门参加课程
db.students.find({"age" : 19} , {"course" : {"$slice" : 2}}).pretty() ;
返回年龄为19岁所有学生的信息,但是要求只显示后两门参加课程
db.students.find({"age" : 19} , {"course" : {"$slice" : -2}}).pretty() ;
返回年龄为19岁所有学生的信息,第一个数据表示跳过的数据量,而第二个数据表示返回的数量第一个数据表示跳过的数据量,而第二个数据表示返回的数量
db.students.find({"age" : 19} , {"course" : {"$slice" :[1,2]}}).pretty() ;
7 嵌套集合运算
插入测试数据:
db.students.insert({"name":"高大拿-A","sex":"男","age":19,"score":89,"address":"海淀区","course" : ["语文","数学","英语","音乐","政治"] , "parents" : [{"name" : "高大拿-A(父亲)" , "age" : 50 , "job" : "工人"} ,{"name" : "高大拿-A(母亲)" , "age" : 46 , "job" : "职员"}]}) ;
db.students.insert({"name":"高大拿-B","sex":"男","age":19,"score":89,"address":"海淀区","course" : ["语文","数学"], "parents" : [{"name" : "高大拿-B(父亲)" , "age" : 50 , "job" : "处长"} ,{"name" : "高大拿-B(母亲)" , "age" : 46 , "job" : "局长"}]}) ;
db.students.insert({"name":"高大拿-C","sex":"男","age":19,"score":89,"address":"海淀区","course" : ["语文","数学","英语"], "parents" : [{"name" : "高大拿-C(父亲)" , "age" : 50 , "job" : "工人"} ,{"name" : "高大拿-C(母亲)" , "age" : 46 , "job" : "局长"}]}) ;
查询年龄大于等于19岁,并且父母有人是局长的信息
db.students.find({"$and" : [{"age" : {"$gte" : 19}} ,{"parents" : {"$elemMatch" : {"job" : "局长"}}}]}).pretty() ;
8 判断某个字段是否存在
9 条件过滤