<meta charset="utf-8">
下载地址http://downloads.mongodb.org/win32/mongodb-win32-x86_64-2012plus-latest-signed.msi
其他版本http://dl.mongodb.org/dl/win32/x86_64
一、MongoDB数据库环境安装
开启服务
mongod --dbpath D:\mdb
连接mongo
mongo
常用命令:
show dbs //查看所有数据库
二、 MongoDB数据库服务自动开启的问题处理
如果系统自动给我们开启了mongodb服务 而我需要自己通过mongod -dbpath 来指定我的数据库目录,所以先把系统开启的mongodb关闭
默认的mongodb服务的数据库目录为 C:\Program Files\MongoDB\Server\4.1\data
use admin
db.shutdownServer
三、数据库和数据集合的创建
use dbname //可以是任意数据库 如果没有这个数据库,在插入数据之后会被创建出来
show collections //查看数据库的数据集合
db.collectionname.insert() //给数据库的某个集合下插入数据
db.collectionname.find() //查询集合里的所有数据
db.collectionname.findOne({where}) //查询集合里的数据
db.collectionname.find().pretty()
//格式化显示输出
db.collectionname.find().explain("executionStats")
//explain.executionStats.executionTimeMillis 查询具体执行时间
四、数据库和数据集合的删除
db.collectionname.drop() //删除数据集合
imagedb.dropDatabase() //删除数据库
五、数据的插入
db //查看当前所在数据库
插入多个字段
db.user.insert({
... name:'张三',
... age:18,
... sex:'男'
... })
WriteResult({ "nInserted" : 1 })
先创建一个对象 然后在插入
x={
... name:'李四',
... age:19,
... sex:'女'
... }
{ "name" : "李四", "age" : 19, "sex":"女"}
db.user.insert(x)
WriteResult({ "nInserted" : 1 })
六、利用update方法更新数据
db.collectionname.update({wherer},{$set:Object},{multi:true},{upsert:true})
db.user.update({name:'lqs'},{$set:{age:118}})
//{multi:true} 默认只修改第一条数据 设置后就可以修改所有查询到的数据
//{upsert:true} 默认如果没找到就什么也不做,设置后如果没有找到就新增这条数据
两个简写方法:updateOne、updateMany
db.collectionname.updateOne({wherer},{$set:Object}) //只修改一条数据 效率高些
db.collectionname.updateMany({wherer},{$set:Object}) //修改多条数据 效率高些
七、利用save方法更新数据(替换数据)
是把对应id的数据去掉换成新的数据
db.collectionname.save({_id,...}) //根据_id替换数据 如果没有加_id则进行新增操作
db.user.save({
"_id":ObjectId("5bf74376c65d42250c7869b3"),
"name":"ashuishushui",
age:'188'
})
八、删除数据
db.collection.remove({where},{justOne:true}) //删除数据 如果justOne为true 则只删除一条数据
两个简写操作:
db.collection.deleteOne({where})
db.collection.deleteMany({where})
九、 比较条件查询
在查询条件里:
{ age:{$gt:18} }
>18
{ age:{$gte:18} }
>=18
{ age:{$lt:18} }
<18
{ age:{$lte:18} }
<=18
{ age:{$ne:18} }
!=18
{ age:{$eq:18} }
=18
十、and和or数据查询
and就是在条件where对象里 多个字段
{name:'lqs',age:18}
or使用数据 查询如下:
{$or:[{name:'lqs'},{age:{$gte:18}}]}
and和or联合使用
db.user.find({
age:{$gte:18},//年龄大约等于18
$or:[{name:'zzz'},{name:'ashuishushui'}] //并且 name为zzz或ashuishushui
})
十一、数据查询包含模式和排除模式
对应的字段的显示 (包含还是排除)
db.user.find({},{age:1,name:1}) //(包含模式)只显示age和name字段
db.user.find({},{age:0,name:0}) //(排除模式)不显示age和name字段
- 两种模式不能共用,特殊情况是 _id:0 可以与包含模式共用
db.user.find({},{age:1,_id:0})
十二、$type操作符(筛选数据类型)
以下都是表示查询age字段的数据类型为string的记录
db.user.find({age:{$type:'string'}})
imagedb.user.find({age:{$type:2}})
十三、limit skip方法
limit //限制查询条数
db.user.find({}).limit(2)//查询2条
以下都是取出1条数据跳过3条数据
db.user.find({}).limit(1).skip(3)
db.user.find({}).skip(3).limit(1)
十四、sort排序
db.user.find({}).sort({age:1}) //根据age升序排列
db.user.find({}).sort({age:-1}) //根据age降序排列
十五、创建索引
提高查询效率
db.user.createIndex({name:1,age:-1}) //根据name字段升序索引 根据age字段降序索引
创建多个字段的索引也叫复合索引
db.user.dropIndex({name:1})//删除索引
db.user.getIndexes() //查看集合索引信息
十六、aggregate数据聚合分组
db.user.aggregate([{$group:{_id:'$sex',num:{$sum:1}}}])
//_id为必须字段 表明是以哪个字段为分组依据
//$sum:1 统计个数 赋给别名字段num
{ "_id" : "woman", "num" : 2}
{ "_id" : "man", "num" : 3 }
分组修饰符
db.user.aggregate([{$group:{_id:'$sex',num:{$sum:1}}}])
$sum:1
后面跟数字 就是递增这个数字
$sum:'$age'
后面跟字段 就是递增这个字段的值
类似$sum 我们称之为修饰符 有以下常见几个修饰符
- $sum //求和
- $avg //平均值
- $first //每组中第一个记录的某字段的值
- $last //每组中最后一个记录的某字段的值
- $max //每组中某字段的最大值
- $min //每组中某字段的最小值
- $project //包含、排除模式
- $match //相当于where查询条件
- $limit //限制
- $skip //跳过
- $group //分组
- $sort //排序
db.user.aggregate([{
$group:{
_id:'$sex',
num:{$sum:1},
total_age:{$sum:'$age'},
max_age:{$max:'$age'},
min_age:{$min:'$age'},
avg_age:{$avg:'$age'},
first_age:{$first:'$age'},
last_age:{$last:'$age'}
}}])
十七、管道查询
你指定多个处理命令 然后一个一个对数据进行处理或筛选
db.user.aggregate([....]}
db.user.aggregate([
{$project:{name:1,age:1,sex:1,_id:0}},//显示name age sex字段
{$match:{name:{$ne:'lqs'}}},//where name != 'lqs'
{$group:{_id:'$sex',count:{$sum:1}}},//分组
{$skip:1},//查询后的结果跳过1
{$limit:1}//再取出1个
])
网友评论