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创建了一个多键索引
复合索引
当我们查询的条件不只有一个时,就需要建立复合索引
- 插入{x:1,y:2,z:3}记录
db.table.insert({x:1,y:1,z:1}) - 想按照x与y的值查询
- 创建索引
db.table.ensureIndex({x:1,y:1}) - 使用{x:1,y:1}作为条件进行查询
db.table.find({x:1,y:1})
过期索引
- 过期索引:是在一段时间后会过期的索引
- 在索引过期后,相应的数据会被删除
- 这适合存储在一段时间之后会失效的数据比如用户的登录信息,存储的日志
在time字段上建立过期索引,在10秒后删除
db.table.ensureIndex({time:1},{expireAfterSeconds:10})
在time字段上插入当前时间
db.table.insert({time:new Date()})
过期索引的限制
- 存储在过期索引字段的值必须是指定的时间类型
说明:必须是ISODate或者ISODate数组,不能使用时间戳,否则不能被自动删除 - 如何指定了ISODate数组,则按照最小的时间进行删除
- 过期索引不能是复合索引
- 删除时间不是精确
说明:删除过程是由后台程序每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