# 添加环境变量
vim .bashrc
export PATH=/usr/local/mongodb/bin:$PATH
# 使环境变量生效
source .bashrc
# 启动
systemctl start mangodb
# 停止
systemctl stop mangodb
# 重启
systemctl restart mangodb
# 查看是否启动成功
ps -aux |grep mangodb
# 默认端口
27017
# 查看当前的数据库:
db
# 查看所有的数据库:
show dbs /show databases
# 切换数据库:
use db_name
# 删除当前的数据库:
db.dropDatabase()
# 不手动创建集合:
向不存在的集合中第一次加入数据时,集合会被创建出来
# 手动创建集合:
db.createCollection(name,options)
db.createCollection("stu")
db.createCollection("sub",{capped:true,size:10})
参数capped:默认值为false表示不设置上限,值为true表示设置上限
参数size:当capped值为true时,需要指定此参数,表示上限大小,当文档达到上限时,会将之前的数据覆盖,单位为字节。
# 查看集合:
show collections
# 删除集合:
db.集合名称.drop()
Object ID:文档ID
string: 字符串,最常用,必须是有效的UTF-8
Boolean:存储一个布尔值,true或false
Integer:整数可以是32位或者64位,这取决于服务器
Double:存储浮点值
Arrays:数组或列表,多个值存储到一个键
Object:用于嵌入式的文档,即一个值为一个文档
Null:存储Null值
Timestamp:时间戳,表示从1970-1-1到现在的总秒数
Date:存储当前日期或时间的UNIX时间格式
创建日期语句如下:参数的格式为YYY-MM-DD
new Date(‘2020-1-1‘)
每个文档都有一个属性,为id,保证每个文档的唯一性
可以自己去设置 _id 插入文档,如果没有提供,那么Mangodb为每个文档提供了一个独特 _id,类型为objectID
objectID是一个12字符的十六进制数:
_id
存在就报错_id
存在会更新db.test1000.update({name:"xiaowang"},{name:"xiaozhao"})
{name:"xiaozhao"}
db.test1000.update({name:"xiaohong"},{$set:{name:"xiaozhang"}})
db.test1000.update({name:"xiaozhang"},{$set:{name:"xiaohong"}},{multi:true})
{multi:true}
达到更新多条的目的db.test1000.remove({name:"xiaohong"},{justOne:true})
{justOne:true}
能达到只删除一条的效果db.collection.find({条件}).count()
db.collection.count({})
db.collection.find({条件},{name:1,_id:0})
_id
默认会显示,置为0不显示_id
之外的其他字段,如果不显示,不写,不能写为0$group
对应的字典中有几个键,结果中就有几个键_id
后面$gender
,$age
$_id.country
{$group:{_id:{country:"$country",province:"$province"}}}
{_id:{country:"",province:""}
db.stu.find(
{$or:[{age:{$gte:20}},{hometown:{$in:["桃花岛","华?"]}}]}
)
#按照gender进行分组,获取不同组数据的个数和平均年龄
db.stu.aggregate(
{$group:{_id:"$gender",count:{$sum:1},avg_age:{$avg:"$age"}}},
{$project:{gender:"$_id",count:1,avg_age:"$avg_age",_id:0}}
)
# 按照hometown进行分组,获取不同组的平均年龄
db.stu.aggregate(
{$group:{_id:"$hometown",mean_age:{$avg:"$age"}}}
)
#使用$group统计整个文档
db.stu.aggregate(
{$group:{_id:null,count:{$sum:1},mean_age:{$avg:"$age"}}}
)
#选择年龄大于20的学生,观察男性和女性有多少人
db.stu.aggregate(
{$match:{$or:[{age:{$gt:20}},{hometown:{$in:["蒙古","?理"]}}]}},
{$group:{_id:"$gender",count:{$sum:1}}},
{$project:{_id:0,gender:"$_id",count:1}}
)
#page37页练习
db.tv3.aggregate(
{$group:{_id:{country:"$country",province:"$province",userid:"$userid"}}},
{$group:{_id:{country:"$_id.country",province:"$_id.province"},count:{$sum:1}}},
{$project:{country:"$_id.country",province:"$_id.province",count:1,_id:0}}
)
db.stu.find({age:{gte:18}})
使用"$in","$nin"判断是否在某个范围内
查询年龄为18、28的学生
db.stu.find({age:{$in[18,28,38]}})
and :在json中写多个条件即可
查询年龄大于或等于18,并且性别为true的学生
db.stu.find({age:{$gte18},genter:true})
or:使用$or,值为数组,数组中每个元素为json
查询年龄大于18,或性别为false的学生
db.stu.find({$or:[{age:{$gt:18}},{gender:false}]})
查询年龄大于18或性别为男生并且姓名是郭靖
db.stu.find({$or:[{age:{$gt:18}},{gender:false}],name:‘gj‘})
使用//或$regex编写正则表达式
查询姓黄的学生
db.products.find({sku:/^abc/})
方法:limit():用于读取指定数量的文档
db.集合名称.find().limit(number)
查询2条学生信息
db.stu.find().limit(2)
方法skip():用于跳过指定数量的文档
db.集合名称.find().skip(number)
db.stu.find().skip(2)
同时使用
db.stu.find().limit(2).skip(3)
使用$where 后面写一个函数,返回满足条件的数据
查询年龄大于30的学生
db.stu.find({
$where:finction(){
return this.age>30
}
})
在查询的返回结果中,只选择必要的字段
db.集合名称.find({},{字段名称:1,....})
方法sort(),用于对集合进行排序
db.集合名称.find().sort({字段:1,....})
方法count()用于统计结果集中文档条数
聚合是基于数据处理的聚合管道,每个文档通过一个由多个阶段(stage)组成的管道,可以对每个阶段的管道进行分组,过滤等功能,然后经过一系列的处理,输出相应的结果。
? db.集合名册.aggregate({管道:{表达式}})
在mangodb中,文档处理完毕后,通过管道进行下一次处理
group bu null:将集合中所有文档分为一组
$match: 过滤数据,只输出符合条件的文档
$project: 修改输入文档的结构,如重命名、增加、删除字段、创建计算结果
$sort: 将输入文档排序后输出
$limit: 限制聚合管道返回的文档数
$skip: 跳过指定数量的文档,并返回余下的文档
$unwind: 将数组类型的字段进行拆分,将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值
处理输入文档并输出
语法:表达式:‘$列名‘
常用表达式:
备份的语法:
mongodump -h dbhost -d dbname -o dbdirectory
-h:服务器地址,也可以指定端口号
-d:需要备份的数据库名称
-o:备份的数据存放的位置,此目录中存放着备份出来的数据
恢复语法:
mongorestore -h dnhost -d dbname --dir dbdirectory
-h:服务器地址
-d:需要恢复的数据库实例
--dir:备份数据所在位置
以提升查询速度
使用数据库建立关键字段(一个或者多个)建立索引进行去重
原文:https://www.cnblogs.com/jiaxiaozia/p/12313648.html