MongoDB简介及基础操作

MongoDB数据库简介及基础操作
1)简介
MongoDB是用c++写的非关系型数据库,特点是高性能、易部署、易使用,存储数据非常方便,面向集合存储,易于存储对象类型的数据,模式自由,支持动态查询,支持完全索引,包含内部对象,支持复制和故障恢复,使用高效的二进制数据存储,包括大型对象,文件存储格式为BSON(一种json的扩展)。

MongoDB的体系结构:
文档(Document),集合(Collection),数据库(datebase)。
文档相当于关系数据库中的一行记录;集合相当于关系数据库中表的概念;

MySQL数据库和MongoDB数据库语句的比较参考文档:
https://docs.mongodb.com/manual/reference/sql-aggregation-comparison/

2)库和集合的命名规则
库名命名规则:

  1. 不能是空字符串(”“)。
  2. 不得含有’ ‘(空格)、.、$、/、\和\0 (空字符)。
  3. 应全部小写。
  4. 最多64字节。
    有一些数据库名是保留的,可以直接访问这些有特殊作用的数据库。
    admin: 从权限的角度来看,这是”root”数据库。要是将一个用户添加到这个数据库,这个用户自动继承所有数据库的权限。一些特定的服务器端命令也只能从这个数据库运行,比如列出所有的数据库或者关闭服务器。
    local: 这个数据永远不会被复制,可以用来存储限于本地单台服务器的任意集合
    config: 当Mongo用于分片设置时,config数据库在内部使用,用于保存分片的相关信息。

集合命名规则:

  1. 集合名不能是空字符串”“。
  2. 集合名不能含有\0字符(空字符),这个字符表示集合名的结尾。
  3. 集合名不能以”system.”开头,这是为系统集合保留的前缀。
  4. 用户创建的集合名字不能含有保留字符。有些驱动程序的确支持在集合名里面包含,这是因为某些系统生成的集合中包含该字符。除非你要访问这种系统创建的集合,否则千万不要在名字里出现$。 
    db.createCollection(“集合名” ,{capped:true, size:100000}) : 创建集合

3)创建库
use+库名,若库名不存在,则自动创建数据库。
Show dbs : 查看所有的数据库。没看到我刚刚创建的数据库,怎么回事儿呢?加个数据 试试看,之后再执行命令,就能看到了
MongoDB中默认的数据库时test,如果没建新的数据库,集合将放在test中。

4)删除库
db.dropDatabase() : 删除当前的数据库。

db.dropDatabase() 严格区分大小写的,不然会报错,
{ “dropped” : “runoob”, “ok” : 1 }
db.collection.drop() : 删除集合

假设现在users集合数据量特别大,但是需要清空该集合,推荐使用db.users.drop(),而不是使用db.users.remove({})。使用drop方法后,再重新创建集合并创建索引。优点是速度快。原因是:remove删除是需要进行一个全盘查询操作的,而drop操作不需要。

5)插入数据

db.col.insert({title: 'MongoDB 教程', 
        description: 'MongoDB 是一个 Nosql 数据库',
        by: 'FLY ',
        url: 'http://www.runoob.com',
        tags: ['mongodb', 'database', 'NoSQL'],
        likes: 100
    })

插入的数据均是键值对形式。使用db.col.find()命令可以查到此数据。

6)更新文档(update()方法)

db.collection.update(
       <query>,
       <update>,
       {
         upsert: <boolean>,
         multi: <boolean>,
         writeConcern: <document>
       }
    )

参数说明:
query : update的查询条件,类似sql update查询内where后面的。
update : update的对象和一些更新的操作符(如$inc…)等,也可以理解为sql update查询内set后面的
upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入 objNew,true为插入,默认是false,不插入。
multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数 为true,就把按条件查出来多条记录全部更新。
writeConcern :可选,抛出异常的级别。

7)删除文档

db.COLLECTION_NAME.remove(DELETION_CRITERIA,1) 删除一条记录
db.col.remove({ ‘ ’ : ‘ ’ }) 根据键值对删除记录
db.col.remove({}) 删除所有记录

8)查询文档
MongoDB 查询数据的语法格式如下:
b.collection.find(query, projection)
query :可选,使用查询操作符指定查询条件
projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有 键值, 只需省略该参数即可(默认省略)。
如果你需要以易读的方式来读取数据,可以使用 pretty() 方法,语法格式如下:

db.col.find().pretty() pretty() 方法以格式化的方式来显示所有文档。

9)关系运算

    (>) 大于 - $gt       -------------greater  than
    (<) 小于 - $lt       -------------less  than
    (>=) 大于等于 - $gte   -------------greater than  equal
    (<= ) 小于等于 - $lte  -------------less than equal
    $ne                 ----------- -not equal  !=
    $eq                 ---------- --equal  =

10)limit和skip
limit和skip用法与SQL类似,不记录
当查询同时使用sort,skip,limit,无论位置先后,最先sort,再skip,再limit。

db.col.find({},{“title”:1,_id:0}).limit(2)
第一个{}放where条件,为空则表示返回集合中所有文档。
第二个{}指定列是否显示,0是不显示,1是显示。只会返回写出来的属性。

11)排序sort()
db.COLLECTION_NAME.find().sort({KEY:1}) 1为升序,-1为降序。
db.col.find({},{“title”:1,_id:0}).sort({“likes”:-1})

12)索引
1、创建索引的语法:

db.COLLECTION_NAME.ensureIndex({KEY:1})
语法中 Key 值为你要创建的索引字段,1为指定按升序创建索引,如果你想按降序来创建索引指定为-1即可。
2、查询索引:
使用db.集合名.getIndexes()实现查询
使用db.system.indexes.find()可查询全部索引
3、删除索引:
指定索引名称删除:db.集合名.dropIndex(name)
删除指定集合的全部索引:db.集合名.dropIndexes()
4、索引重建:
使用集合的reIndex()方法进行索引的重建。
在文档中直接更改索引值即可。

13)集合的操作
创建集合
db.createCollection(name, { size : …, capped : …, max : … })

示例:

db.createCollection(‘replicationColletion’, {‘capped’:true, ‘size’:10240, ‘max’:17855200})
{ “ok” : 1 }
show collections
replicationColletion
storeCollection
system.indexes

查看所有集合\表
show collections
show tables

选定某一集合
use collection_name

查看集合的信息
db.stats()

删除一个集合,但是需要先指定一个数据库,即先执行 use db_name
db.dropDatabase()

修改集合的名称
db.collection_name.renameCollection(‘new_name’)
删除集合:也可以执行db.集合名.drop()

14)其他命令

  • Net start MongoDB : 启动服务
  • Net stop MongoDB : 停止服务
  • Exit 或 Ctrl+C退出MongoDBshell
  • 查询指定数据库统计信息:db.stats()
  • 查询指定数据库包含的集合名称列表:db.getCollectionNames()
  • 查询并统计结果记录数:
    use 要统计的库名
    db.baseSe.find().count()
  • 查询指定数据库集合的可用空间:
    db.集合名.storageSize()
    这里写图片描述

  • 查询指定数据库的集合的存储空间
    db.集合名.totalSize()
    这里写图片描述

  • 终止服务器进程:db.shutdownServer()
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值