-
属于NoSQL, 非关系型数据库
-
内存级读写
-
C++开发的,运行稳定,性能高
-
分布式 文档存储 (物理+内存)存储
-
collection 集合
-
document 文档(集合中的一个数据)
查看Ubuntu版本
cat /etc/issue
安装
1.导入软件源的公钥
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv EA312927
2.为mongodb创建软件源list文件 (ubuntu16.04)
echo "deb http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.2.list
3.更新软件源并安装mongodb
sudo apt-get update
sudo apt-get install -y mongodb-org
4.配置启动文件
如果是ubuntu16.04的版本,需要手动新建/lib/systemd/system/mongod.service文件,并写入下面内容:
sudo vi /etc/mongod.conf 修改配置文件
# 退出: shift + : + q
[Unit]
Description=High-performance, schema-free document-oriented database
After=network.target
Documentation=https://docs.mongodb.org/manual
[Service]
User=mongodb
Group=mongodb
ExecStart=/usr/bin/mongod --quiet --config /etc/mongod.conf
[Install]
WantedBy=multi-user.target
5.检测是否安装
ps ajx|grep mongod
启动服务器:
sudo mongod 启动服务器
sudo service mongod restart 重新启动
mongo 客户端
# sudo systemctl start mongod
db 查看当前数据库名称
db.stats() 查看当前数据库信息
show dbs 查看数据库
GUI:robomongo 图形界面
在图形界面写json
点击robomongo连接GUI
sudo tar -zxvf mongodb-linux-x86_64-ubuntu1404-3.2.4.tgz
创建集合
创建集合 db.createCollection('stu')
查看当前所有集合 show collections
删除集合 db.stu.drop()
添加数据 db.stu.insert({name:'gj',gender:true})
查找数据 db.stu.find()
数据类型:
ObjectID : 文档ID(会自动生成)
String : 字符串,最常用(UTF-8)
Boolean : 存储一个布尔值
Object : 用于嵌入式的文档,一个值为一个文档
Timestamp : 时间戳
更新
# 更新一条数据, 默认修改一条 (修该整个文档)
db.stu.update({},{name:'gj1'})
# 多行修改 $set(只修改某个属性)
db.stu.update({},{$set:{name:'gj1'}})
删除
db.stu.remove({}) 删除
也可以指定条件,删除符合条件的文档
size
- 大小超过设置值后,会覆盖最老的值
查询
db.sub.findOne()
db.sub.find({title:'mongodb'})
运算符查询:
db.sub.find({count:{$gt:5}}) count>5的值
逻辑运算符 ,连接
db.sub.find({title:'css',count:{$gt:2}})
或 : {$or:[{}, {}]}
db.sub.find({$or:[{title:'css'},{count:{$gt:2}}]})
in(课时在1-3之间的)-->反:nin
db.sub.find({count:{$in:[1,3]}})
正则表达式
db.stu.find({name:/^李/}) 查询姓李的学生
自定义查询
db.stu.find({$where:function(){return this.age>13}}) >13的学生
js查询以a开头的
db.stu.find({$where:function(){return this.name.indexOf('a')==0}})
查询包含b的
db.stu.find({$where:function(){return this.name.indexOf('b')>=0}})
limit和skip
结合使用,skip跳过几条
db.stu.find().limit(2) 显示2条数据
跳过3条之后显示2条数据
db.stu.find().limit(2).skip(3)
投影筛选
查询到的结果中,只选择必要的字段,不选择一个文档的整个字段
如果文档有3个字段,需要显示2个字段,投影2个字段就可以了
- 1 结果中显示字段
- 0 不显示
只显示name字段
db.stu.find({},{name:1,_id:0})
排序
- 1 :升序
- -1 :降序
按年龄从大到小排序
db.stu.find().sort({age:-1})
按姓名降序,再按年龄升序
db.stu.find().sort({name:-1, age:1})
统计个数
年龄大于13的总数
db.stu.count({age:{$gt:13}})
消除重复
db.collection_name.distinct(field,query,options)
field -----指定要返回的字段(string)
query-----条件查询(document)
options-----其他的选项(document)
# 去重age>1 , 显示name字段
db.stu.distinct('name',{age:{$gt:1}})