MONGODB November 30, 2017

MongoDB Shell命令

Words count 6.4k Reading time 6 mins. Read count 0

开启MongoDB数据库服务

  mongo根目录/bin/mongod -f 配置文件目录/配置文件名
例:./bin/mongod -f conf/mongod.conf

Mongod.conf文件内容参考如下:

dbpath = /data/mongodb
logpath = /data/mongodb/mongodb.log
logappend = true
port = 27017
fork = true
auth = true

Mongod命令各常用参数说明:

参数 说明
–quiet 安静输出
–port arg 指定服务端口号,默认端口27017
–bind_ip arg 绑定服务IP,若绑定127.0.0.1,则只能本机访问,不指定默认本地所有IP
–logpath arg 指定MongoDB日志文件,注意是指定文件不是目录
–logappend 使用追加的方式写日志
–journal 启用日志选项,MongoDB的数据操作将会写入到journal文件夹的文件里
–journalOptions arg 启用日志诊断选项
–fork 以守护进程的方式运行MongoDB,创建服务器进程
–maxConns arg 最大同时连接数 默认2000
–auth 启用验证
–noauth 不启用验证
–dbpath arg 指定数据库路径
–ipv6 启用IPv6选项
–pidfilepath arg PID File 的完整路径,如果没有设置,则没有PID文件

强行关闭MongoDB

  先用命令 ps -ef | grep mongod 查出mongod 的进程pid
然后kill pid 即可

数据库

连接MongoDB数据库

  mongo根目录/bin/mongo 数据库地址:端口号/库名称
例: ./bin/mongo 127.0.0.1:12345/test

关闭MongoDB数据库

  db.shutdownServer()

新建和切换数据库

  MongoDB不用特别地去声明新建一个数据库,直接用use 数据库名 就可以了。

删除数据库

  先用db.use切换到要删除的数据库,然后使用db.dropDatabase()来删除数据库

数据操作

插入一条数据

db.collection.insert({key: value})

其中集名称可以自己起

插入多条数据

  可以使用for循环插入: for(i=3;i<100;i++)db.collection.insert({key: value})

查询所有数据

db.collection.find()

查询单条数据

db.collection.find({key: value})

查询后有条件地进行处理

db.collection.find({key: value}).skip(3).limit(5).sort({key: value})

上面查询语句后的限制分别是skip(跳过多少条数据)、limit(限制查多少条数据)、sort(将查询出来的结果集排序)

显示库中的所有集名称

show collections

删除数据库中的集合

db.collection.drop()

索引

查看索引

db.imooc_2.getIndexes()

_id索引
  • _id索引是绝大多数集合默认建立的索引。
  • 对于每个插入的数据,MongoDB都会自动生成一条唯一的_id字段。
创建一个单键索引
  • 单键索引是最普通的索引
  • 单键索引不会自动创建

  例如: 一条记录为{x: 1, y: 2, z: 3},如果我们在x上建立了索引,就可以使用x为条件进行查寻。

db.collection.ensureIndex({index: order})

  • index: 索引
  • order: 1表示升序, -1表示降序
创建一个多键索引

多键索引与单键索引创建形式相同,区别在于字段的值。

  • 单键索引:值为一个单一的值,如字符串,数字或日期。
  • 多键索引:值具有多个记录,如数组。

db.collection.insert({x:[1,2,3,4,5]}) //插入一条数组数据

db.collection.insert({x:new Date()}) //插入一条数组数据

创建一个复合索引

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

  例如{x:1,y:2,z:3}这样一条数据,要按照x与y的值进行查询,就需要创建复合索引db.collection.ensureIndex({x:1, y:1}),然后就可以使用{x: 1, y:1}作为条件进行查询

db.collection.ensureIndex({x:1, y:1})

创建一个过期索引
  • 在一段时间后会过期的索引
  • 在索引过期后,相应的数据会被删除
  • 适合存储在一段时间之后会失效的数据,比如用户的登录信息、存储的日志等。

db.imooc_2.ensureIndex({time:1},{expireAfterSeconds: seconds}) 创建过期索引,time-字段,expireAfterSeconds在多少秒后过期,单位:秒

  过30秒后再find,刚才的数据就已经不存在了。

  过期索引的限制:

  1. 存储在过期索引字段的值必须是指定的时间类型,必须是ISODate或者ISODate数组,不能使用时间戳,否则不能自动删除。
    例如 >db.imooc_2.insert({time:1}),这种是不能被自动删除的
  2. 如果指定了ISODate数组,则按照最小的时间进行删除。
  3. 过期索引不能是复合索引。因为不能指定两个过期时间。
  4. 删除时间是不精确的。删除过程是由MongoDB的后台进程每60s跑一次的,而且删除也需要一定时间,所以存在误差
0%