mongodb入门教程

MongoDB基本知识

下载和安装

官网下载地址:https://www.mongodb.com/download-center?jmp=nav#community

wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel62-3.6.4.tgz

bin

mongos 路由服务器
mongod 服务器
mongo 客户端

比较运算符

符号含义
$lt<
$lte<=
$gt>
$gte>=
$ne!=

1是升序,-1是降序

操作

显示所有命令用法

db.help()

基本操作

显示所有数据库  
show dbs  

切换数据库,如果没有则会在需要的时候进行创建  
use test  

显示当前所在数据库
db

关闭数据库  
db.dropDatabase()

查看表  
show collections  
show tables

删除表  
db.test.drop()  

查看集合的索引  
db.table.getIndexes()     

创建

创建一个用户信息
db.test.insert({"name":"lili","age":20,"sex":"female"}) 

更新

将processed字段为1的值改为0
db.mpData.updateMany({processed:1},{$set:{processed:0}})

和上面一样,更新一条
db.mpData.update({processed:1},{$set:{processed:0}})

$set指定一个键并更新键值,若键不存在则创建

删除

删除所有文档,不会删除集合本身,也不会删除集合的元信息
db.test.remove({})

查询

插入一条数据
db.test.insert({x:1})  

插入数据,通知指定_id字段  
db.test.insert({x:2,_id:1})  

插入97条数据  
for(i=3;i<100;i++)db.test.insert({x:i})  

查看数据总数  
db.test.count()  

查询时跳过前三条数据,限制返回数据为2条,同时对x字段进行排序  
db.test.find().skip(3).limit(2).sort({x:1})   

用find进行查看,函数参数可以为空,返回所有数据  
db.test.find()   

查找x为1的数据  
db.test.find({x:1})  

将x为1的数据变为x为999  
db.test.update({x:1},{x:999})  

有多个字段时进行修改  
db.test.insert({x:100,y:100,z:100})  

把这个数据整个变成y:999  
db.test.update({z:100},{y:999})  

只修改y字段的值为999  
db.test.update({z:100},{$set:{y:999}})  

在更新一条不存在的数据时自动创建  
db.test.update({y:50},{y:60},true)  

update只会更新第一条找到的数据,同时更新时可写成如下形式  
将多条c为1的数据设置为c为2  
db.test.update({c:1},{$set:{c:2}},false,true)   

数据的删除与查询类似接受一个参数,删除操作不允许不传参数   
db.test.remove({c:2})  

对x创建索引,x为1代表正向排序,x为-1代表逆向排序  
db.table.ensureIndex({x:1})  

复制

db.test(复制源表).find().forEach(function(x){
    db.target(目的表).insert(x);
})

用户操作

创建用户
db.createUser({user:"tom", pwd:"123", roles:[{role:"dbAdmin", db:"testdb"}]})

查询用户
use admin;
db.system.users.find();

删除tom用户
db.system.users.remove({user:"tom"})

查看当前用户权限
db.runCommand({usersInfo:"tom", showPrivileges:true})

修改密码
db.changeUserPassword("tom", "123456")

启用用户
db.auth("tom", "123")

用户具体的角色有

角色名解释
read允许用户读取指定数据库
readWrite允许用户读写指定数据库
dbAdmin允许用户在指定数据库中执行管理函数,如索引创建,删除,查看统计或访问system.profile
userAdmin允许用户向system.users集合写入,可以找指定数据库里创建,删除和管理用户
clusterAdmin只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限
readAnyDatabase只在admin数据库中可用,赋予用户所有数据库的读权限
readWriteAnyDatabase只在admin数据库中可用,赋予用户所有数据库的读写权限
userAdminAnyDatabase只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
dbAdminAnyDatabase只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限
root只在admin数据库中可用。超级账号,超级权限

常见的查询索引

_id索引

_id索引是绝大多数集合默认建立的索引
对于每个插入的数据,MongoDB都会自动生成一条唯一的_id字段

单建索引

单键索引是最普通的索引
与_id索引不同,单键索引不会自动创建
如记录为{x:1,y:2,z:3}在x字段上创建索引

多键索引

多键索引与单键索引创建形式相同,区别在于字段的值
单键索引:值为一个单一的值,例如字符串,数字或者日期
多键索引:值具有多个记录,例如数组
db.table.insert({x:[1,2,3,4,5]})
MongoDB为x创建了一个多键索引

复合索引

当我们查询的条件不只有一个时,就需要建立复合索引

  1. 插入{x:1,y:2,z:3}记录
    db.table.insert({x:1,y:1,z:1})
  2. 想按照x与y的值查询
  3. 创建索引
    db.table.ensureIndex({x:1,y:1})
  4. 使用{x:1,y:1}作为条件进行查询
    db.table.find({x:1,y:1})

过期索引

  1. 过期索引:是在一段时间后会过期的索引
  2. 在索引过期后,相应的数据会被删除
  3. 这适合存储在一段时间之后会失效的数据比如用户的登录信息,存储的日志

在time字段上建立过期索引,在10秒后删除
db.table.ensureIndex({time:1},{expireAfterSeconds:10})
在time字段上插入当前时间
db.table.insert({time:new Date()})

过期索引的限制
  1. 存储在过期索引字段的值必须是指定的时间类型
    说明:必须是ISODate或者ISODate数组,不能使用时间戳,否则不能被自动删除
  2. 如何指定了ISODate数组,则按照最小的时间进行删除
  3. 过期索引不能是复合索引
  4. 删除时间不是精确
    说明:删除过程是由后台程序每60s跑一次,而且删除也需要一些时间,所以存在误差

全文索引

建立方法

值固定,为text  
db.table.ensureIndex({key:"text"})  
db.table.ensureIndex({key_1:"text",key_2:"text"})  
为所有字段建立全文索引  
db.table.ensureIndex({"$**":text"})  

使用全文索引查询

db.table.find({$text:{$search:"coffee"}})  
查询包含aa或者bb或者cc的内容  
db.table.find({$text:{$search:"aa bb cc"}})  
查询包含aa或者bb,但不包含cc的字符串  
db.table.find({$text:{$search:"aa bb -cc"}})  
查询包含aa和bb和cc的内容,包内容用"括起来即可\为转义字符  
db.table.find({$text:{$search:"\"aa\" \"bb\" \"cc\""}})      

db.table.ensureIndex({“article”:“text”})
db.table.insert({“article”:“aa bb”})
db.table.insert({“article”:“aa bb cc dd”})
db.table.insert({“article”:“aa bb rr gg”})
db.table.insert({“article”:“aa bb rr gg dfdfadfda”})
db.table.find({$text:{$search:“aa”}})
全文索引相似度
$meta操作符:{score:{$meta:“textScore”}}
写在查询条件后面可以返回返回结果的相似度,与sort一起使用,可以达到很好的实用效果
db.table.find({$text:{$search:“aa bb”}},{score:{$meta:“textScore”}})
对相似度进行排序
db.table.find({$text:{$search:“aa bb”}},{score:{$meta:“textScore”}}).sort({score:{$meta:“textScore”}})
[外链图片转存失败(img-5lA5NyTl-1564390465574)(http://i.imgur.com/dqXWNuU.png)]

全文索引使用限制

每次查询,只能指定一个$text查询
$text查询不能出现在$nor查询中
查询中如果包含了$text,hint不再起作用
MongoDB全文索引还不支持中文

地理位置索引

Java操作MongoDB

参考博客

[1]http://www.runoob.com/mongodb/mongodb-query.html
[2]http://blog.csdn.net/andie_guo/article/details/26068711
[3]http://www.cnblogs.com/sweetchildomine/p/6397136.html
官方驱动文档
[4]http://mongodb.github.io/mongo-java-driver/
复制数据
[5]https://blog.csdn.net/sinat_33455447/article/details/51918449

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java识堂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值