0
点赞
收藏
分享

微信扫一扫

mongodb入门教程


MongoDB基本知识

下载和安装

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

wget

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
官方驱动文档
[4]http://mongodb.github.io/mongo-java-driver/


举报

相关推荐

0 条评论