mongodb 基本常用操作
服务启动
服务启动
mongod --config /usr/local/etc/mongod.conf
客户端启动
mongo
客户端退出
exit control+C
数据库相关操作
查看当前的数据库: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()
monog相关数据类型
Object ID: ⽂档ID
String: 字符串, 最常⽤, 必须是有效的UTF-8
Boolean: 存储⼀个布尔值, true或false
Integer: 整数可以是32位或64位, 这取决于服务器
Double: 存储浮点值
Arrays: 数组或列表, 多个值存储到⼀个键
Object: ⽤于嵌⼊式的⽂档, 即⼀个值为⼀个⽂档
Null: 存储Null值
Timestamp: 时间戳, 表示从1970-1-1到现在的总秒数
Date: 存储当前⽇期或时间的UNIX时间格式
简单的增删改查
增
db.集合名称.insert(document)
db.stu.insert({name:'gj',gender:1})
db.stu.insert({_id:"20170101",name:'gj',gender:1})
插⼊⽂档时, 如果不指定_id参数, MongoDB会为⽂档分配⼀个唯⼀的ObjectId
db.collection.insert({}) 插入数据,_id存在会报错
db.collectuion.save({}) 插入数据,_id存在会更新
改
# db.集合名称.update(<query> ,<update>,{multi: <boolean>})
# 参数query:查询条件
# 参数update:更新操作符
# 参数multi:可选, 默认是false,表示只更新找到的第⼀条记录, 值为true表示把满⾜条件的⽂档全部更新
db.stu.update({name:'hr'},{name:'mnc'}) 把name 为hr的整条数据替换为mnc,hr原有的其他键值对也会没有
db.stu.update({name:'hr'},{$set:{name:'hys'}}) 把name 为hr的数据中name的值更新为为hys,更新一条,这个才是常用的操作
db.stu.update({},{$set:{gender:0}},{multi:true}) 更新全部
注意:"multi update only works with $ operators"
删
# db.集合名称.remove(<query>,{justOne: <boolean>})
# 参数query:可选,删除的⽂档的条件
# 参数justOne:可选, 如果设为true或1, 则只删除⼀条, 默认false, 表示删除多条
`db.tv.remove({name:"xiaoming"},{justOne:true})`
查
db.集合名称.find()
高级查询
条件查询
# db.集合名称.find({条件⽂档})
查询年龄为10 的: db.stu.find({age:10})
查询年龄为10 ,只返回一条数据 db.stu.findone({age:10})
查年龄为10的数据,格式化输出 :db.stu.find({age:10}).pretty()
比较运算符
- 等于: 默认是等于判断, 没有运算符
- ⼩于:$lt (less than)
- ⼩于等于:$lte (less than equal)
- ⼤于:$gt (greater than)
- ⼤于等于:$gte
- 不等于:$ne
查询年级大于等于18的 : db.stu.find({age:{$gte:18}})
逻辑运算符
- and:在json中写多个条件即可
- or:使⽤$or, 值为数组, 数组中每个元素为json
and -->查询年龄⼤于或等于18,且性别为true的学⽣
db.stu.find({age:{$gte:18},gender:true})
or -->查询年龄⼤于18,或家乡在leshan的学⽣
db.stu.find({$or:[{age:{$gt:18}},{hometown:"leshan"}]})
- 查询年龄⼤于18或性别为男⽣, 并且姓名是小明
db.stu.find({$or:[{age:{$gte:18}},{gender:true}],name:'xiaoming'})
范围运算符
- 使⽤"$in", "$nin" 判断是否在某个范围内
查询年龄为18、 28的学⽣
db.stu.find({age:{$in:[18,28]}})
正则表达式使用
- 使⽤//或$regex编写正则表达式
查询姓⻩开头的学⽣
db.stu.find({name:/^⻩/})
db.stu.find({name:{$regex:'^⻩'}})
limit 和skip使用
- ⽅法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(4).skip(5)或 db.stu.find().skip(5).limit(4)
注:建议先skip 再使用limit
投影--->选择返回结果的字段
在查询到的返回结果中, 只选择必要的字段
db.集合名称.find({},{字段名称:1,...})
参数为字段与值, 值为1表示显示, 不写不显示
特殊: 对于_id列默认是显示的, 如果不显示需要明确设置为0
db.stu.find({},{_id:0,name:1,gender:1})
sort 和count
⽅法sort(), ⽤于对 集进⾏排序
db.集合名称.find().sort({字段:1,...})
#参数 1 ---->升序排列
#参数 -1-----> 降序排列
根据性别降序, 再根据年龄升序
db.stu.find().sort({gender:-1,age:1}
⽅法count()⽤于统计结果集中⽂档条数
db.集合名称.find({条件}).count()
db.集合名称.count({条件})
db.stu.find({gender:true}).count()
统计stu集合里,年龄大于20的,gender 为true 的个数
db.stu.count({age:{$gt:20},gender:true})
去重distinct()
方法distinct()对数据进⾏去重 ----> 返回一个数组
db.集合名称.distinct('去重字段',{条件})
stu集合中年龄大于18 的 人hometown来自哪里
db.stu.distinct('hometown',{age:{$gt:18}})
备份和还原
备份的语法:
mongodump -h dbhost -d dbname -o dbdirectory
-h: 服务器地址, 也可以指定端⼝号
-d: 需要备份的数据库名称
-o: 备份的数据存放位置, 此⽬录中存放着备份出来的数据
恢复语法:
mongorestore -h dbhost -d dbname --dir dbdirectory
-h: 服务器地址
-d: 需要恢复的数据库实例
--dir: 备份数据所在位置
备份
mongodump -h 192.168.196.128:27017 -d test1 -o ~/Desktop/test1bak
还原
mongorestore -h 192.168.196.128:27017 -d test2 --dir ~/Desktop/test1bak/test1
浙公网安备 33010602011771号