Mongodb

基本使用

ps:	启动mongodb服务器
    service mongod start
	停止mongodb服务器
	service mongod stop
	重启mongod服务器
    service mongod restart
    查看端口使用情况
    netstat -ntlp

mongodb没有表的概念,其他数据库所谓的表在这里叫做集合

    数据库不需要手动创建,当你use db_name ,并向其中插入数据后,系统会自动创建
    显示所有的数据库
    show dbs/show databases
    
    查看当前所在的数据库位置
    db
    
    切换数据库
    use db_name
    
    删除当前的数据库
    db.dropDatabase()
    
    集合也不需要手动创建,当你想集合中插入数据后,系统会自动向创建集合
    手动创建集合
    db.createCollection(name, options)
    显示所有集合
    show collections
    删除集合
    db.coll_name.drop()

数据类型:

类型说明
Object ID文档ID
String字符串,必须是有效的UTF-8
Boolean布尔类型,true或false
Double浮点值
Integer32位或者64位的整数
Arrays数组或列表,多个值存储到一个键
Null空值
Object用于存储嵌入式的文档
Timestamp时间戳,表示从1970-1-1到现在的秒数
Date存储当前日期或时间的Unix时间格式
插入数据
db.coll_name.insert(data)
插入文档时,如果不指定_id参数,系统会自动为文档分配一个唯一的ObjectID
不能有重复的ObejctID

db.colle_name.save(data)
如果插入重复的Obejct_ID,则对应的数据会修改
如果没有,会插入数据


更新操作
db.coll_name.update({指定的数据},{更改后的数据})  //会把整条数据都改为后面的数据
db.coll_name.update({指定的数据},{$set{更改后的数据}})  //会把指定的键更改,别的键不受影响
::在默认情况下,update只会更新第一条数据
db.coll_name.update({指定的数据},{更改后的数据},{multi:true}) //这样的话,在更改后,会直接将所有符合条件的数据都更新

删除操作
db.coll_name.remove({指定的数据})  //默认删除所有的符合条件的数据
db.coll_name.remove({指定的数据},{justOne:true}) //只删除第一条,默认情况下是false
运算符意义
等于默认就是等于,所以没有运算符
$lt(less than)小于
$lte(less than equal)小于等于
$gt(greater than)大于
$gte(greater than equal)大于等于
$ne(not equal)不等于
简单查询
db.coll_name.find()
db.coll_name.find({指定的条件})	//返回所有的符合条件的
db.coll_name.find({指定的条件}).pretty()	//格式清晰的输出
db.coll_name.findOne({指定的条件})	//返回符合条件的第一条
db.coll_name.find().sort({age:1})	//升序,-1为降序

// 如果在返回时,我们不想要全部的字段,只想要部分字段,可以将需要的字段设置为1
// id是默认显示的,如果不想显示设置为   _id:0
db.coll_name.find({指定的条件},{name:1})

比较查询
db.coll_name.find({age:{$lt:18}})	//coll_name集合中,age小于18的
db.coll_name.find({age:{$lte:18}})	//coll_name集合中,age小于等于18的
db.coll_name.find({age:{$in:[18,28,38]}})	//age等于18或28或38的

or和and操作
db.coll_name.find({"name":"wang","gender":"men"})	//查询name=wang,gender=men的数据
db.coll_name.find({$or:[{"name":"wang"},{"gender":"men"}]})	//查询name=wang或者gender=men的数据
db.coll_name.find({$or:[{age:{$gt:20}},{address:{$in:["henan","hebei"]}}]})	//age>20或者address是henan或者hebei的

正则表达式
db.coll_name.find({"name":/正则表达式/})
db.coll_name.find({"name":{$regex:"正则表达式"}})

skip和limit操作
db.coll_name.skip(3)	//跳过前3个
db.coll_name.limit(3)	//选中前3个

自定义查询
db.coll_name.find({$where:function(){
	// 自定义js部分
	return this.age>18
}})

db.coll_name.find().count()	//统计个数
db.coll_name.distinct("字段",{条件})	//去重
数据备份
mongodump -h dbhost -d dbname -o directory
-h	服务器地址,也可以指定端口号(本机就不需要指定)
-d	需要备份的数据库名称
-o	备份的数据存放的位置

数据恢复
mongorestore -h dbhost -d dbname --dir directory
-h	服务器地址,也可以指定端口号(本机就不需要指定)
-d	需要恢复的数据库实例
--dir	备份的数据库所在的位置

聚合(aggregate)

聚合是基于数据处理的聚合管道,每个文档通过一个由多个阶段组成的管道,可以对每个阶段的管道进行分组,过滤等功能,然后经过一系列的处理,输出相应的结果。
常用的管道

命令用途
$group将集合中的文档分组,可用于统计结果
$match过滤数据,只输出符合数据的文档
$project修改输入文档的结构,如重命名,增加,删除,修改字段
$sort将输入文档排序后输出
$limit限制聚合管道输出的文档数
$skip跳过指定数量的文档,并输出余下的文档
$unwind将数组类型的字段进行拆分

常用的表达式

表达式用途
$sum计算总和,$sum:1表示以一倍计数
$avg计算平均值
$min计算最小值
$max计算最大值
$push在结果文档中插入值到一个数组中
$first根据资源文档的排序获取第一个文档的数据
$last根据资源文档获取最后一个文档的数据
db.coll_name.aggregate(
	{$match:{age:{$gt:12}}},	//先匹配age大于12的数据
	{$group:{_id:"address",avg_age:{$avg:"$age"}}},	//通过address进行分组,并求出来平均值,如果_id:null,就是对整个文档操作
	{$project:{_id:0,avg_age:1}},	//可以对上一个管道传过来的数据进行操作,确定哪个显示或不显示
	{$sort:{avg_age:1}}		//将结果升序输出
)

db.coll_name.insert({_id:20190899,"item":"T-shirt","size":[S,M,L,XL]})	// 将包含数组类型的值插入
db.coll_name.aggregate(
	{$unwind:"$size"}	//会直接将查询出来的结果进行拆分
)

输出:
	{_id:20190899,"item":"T-shirt","size":"S"}
	{_id:20190899,"item":"T-shirt","size":"M"}
	{_id:20190899,"item":"T-shirt","size":"L"}
	{_id:20190899,"item":"T-shirt","size":"XL"}
但是:unwind遇到size为空或者没有size属性的值时,会舍弃整条数据
我们需要添加一个参数:
preserveNullAndEmptyArrays:true

索引

建立索引
db.coll_name.ensureIndex({"name":1})
db.coll_name.ensureIndex({"name":1},"unipue":true)	//索引值是唯一的
建立联合索引

查看所有的索引
db.coll_name.getIndexes()
删除索引
db.coll_name.dropIndex("索引名称")
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值