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:

集合命名规则:

  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})
  • 1

插入的数据均是键值对形式。使用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() 
  • MongoDB简介及基础操作_数据

  • 查询指定数据库的集合的存储空间
    db.集合名.totalSize() 
  • MongoDB简介及基础操作_mongodb_02

  • 终止服务器进程:db.shutdownServer()