MongoDB学习笔记

一:安装并运行:

这里我安装的是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数据库才正式创立

db.dept.insert({"deptno":10,"dname":"
财务部
","loc":"
北京
"}) ;
db.dept.insert({"deptno":10,"dname":"
财务部
","loc":"
北京
"}) ;
db.dept.insert({"deptno":10,"dname":"
财务部
","loc":"
北京
"}) ;
db.dept.insert({"deptno":10,"dname":"财务部","loc":"北京"}) ; //插入一条数据

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
数据自
己为用户生成的。

在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

在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({"name":"
张三
"}).pretty() ;
db.students.find({"name":"张三"}).pretty() ; //查询姓名是张三的学生

db.students.find({"age":
{"$gt":19}
}).pretty() ;
db.students.find({"age":{"$gt":19}}).pretty() ; //查询年龄大于19岁的学生

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() ; //

模的运算使用“
$mod
”来完成,语法“
{$mod : [
数字
,
余数
]}
求模,模的运算使用“$mod”来完成,语法“{$mod : [数字,余数]}”


5 范围查询

db.students.find({"name" : {"$in" : ["
张三
","
李四
","
王五
"]}}).pretty() ;
db.students.find({"name" : {"$in" : ["张三","李四","王五"]}}).pretty() ;  //
查询姓名是“张三”、“李四”、“王五”的
信息
查询姓名是“张三”、“李四”、“王五”的信息,类似in();

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 判断某个字段是否存在

查询具有
parents
成员的数据
查询具有
parents
成员的数据
查询具有
parents
成员的数据 查询具有parents成员的数据
查询具有
parents
成员的数据
db.students.find({"parents":{"$exists":true}}).pretty();

查询具有
parents
成员的数据
查询不具有course成员的数据

查询具有
parents
成员的数据
db.students.find({"course":{"$exists":false}}).pretty() ;

9 条件过滤

查询具有
parents
成员的数据
db.students.find({"$where" : "this.age>20"}).pretty() ;
查询具有
parents
成员的数据
查询具有
parents
成员的数据
db.students.find("this.age>20").pretty() ;


查询具有
parents
成员的数据

查询具有
parents
成员的数据
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值