文章目录

  • mongodb简介
  • mongodb存储
  • mongodb概念
  • mongodb数据结构
  • mongodb连接
  • mongodb命令
  • 注意事项



mongodb的存储引擎 mongodb 存储数据 结构_数据库

mongodb简介

是一个基于分布式文件存储的数据库,c++编写,是为了web应用提供可扩展的高性能数据存储解决方案,在高负载的情况下,添加更多的节点,可以保证服务器性能

*** 
	是介于关系型数据库和非关系型数据库之间,是非关系数据库中功能最全的,最像关系型数据库

mongodb存储

MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。

mongodb的存储引擎 mongodb 存储数据 结构_mongodb_02

mongodb概念

MongoDB术语/概念

解释/说明

database

数据库

collection

数据库表/集合

document

数据记录行/文档

field

数据字段/域

index

索引

表连接,MongoDB不支持

primary key

主键,MongoDB自动将_id字段设置为主键

MongoDB的默认数据库为"db",该数据库存储在data目录中

mongodb数据结构

数据类型

描述

String

字符串。存储数据常用的数据类型。在 MongoDB 中,UTF-8 编码的字符串才是合法的。

Integer

整型数值。用于存储数值。根据你所采用的服务器,可分为 32 位或 64 位。

Boolean

布尔值。用于存储布尔值(真/假)

Double

双精度浮点值。用于存储浮点值。

Min/Max keys

将一个值与 BSON(二进制的 JSON)元素的最低值和最高值相对比。

Array

用于将数组或列表或多个值存储为一个键。

Timestamp

时间戳。记录文档修改或添加的具体时间。

Object

用于内嵌文档。

Null

用于创建空值。

Symbol

符号。该数据类型基本上等同于字符串类型,但不同的是,它一般用于采用特殊符号类型的语言。

Date

日期时间。用 UNIX 时间格式来存储当前日期或时间。你可以指定自己的日期时间:创建 Date 对象,传入年月日信息。

Object ID

对象 ID。用于创建文档的 ID,包含 12 bytes,值可以是任何类型的,默认是个 ObjectId 对象

Binary Data

二进制数据。用于存储二进制数据。

Code

代码类型。用于在文档中存储 JavaScript 代码。

Regular expression

正则表达式类型。用于存储正则表达式。

mongodb连接

mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]

使用用户名fred,密码foobar登录localhost的admin数据库
	mongodb://fred:foobar@localhost


使用用户名fred,密码foobar登录localhost的baz数据库。
	mongodb://fred:foobar@localhost/baz


连接 replica set 三台服务器 (端口 27017, 27018, 和27019):
	mongodb://localhost,localhost:27018,localhost:27019


连接 replica set 三台服务器, 写入操作应用在主服务器 并且分布查询到从服务器。
	mongodb://host1,host2,host3/?slaveOk=true

x
以安全模式连接到replica set,并且等待至少两个复制服务器成功写入,超时时间设置为2秒。
	mongodb://host1,host2,host3/?safe=true;w=2;wtimeoutMS=2000

分段

含义

mongodb://

这是固定的格式,必须要指定。

username:password@

可选项,如果设置,在连接数据库服务器之后,驱动都会尝试登录这个数据库

host1

必须的指定至少一个host, host1 是这个URI唯一要填写的。它指定了要连接服务器的地址。如果要连接复制集,请指定多个主机地址。

portX

可选的指定端口,如果不填,默认为27017

/database

如果指定username:password@,连接并验证登录指定数据库。若不指定,默认打开 test 数据库

?options

是连接选项。如果不使用/database,则前面需要加上/。所有连接选项都是键值对name=value,键值对之间通过&或;(分号)隔开

options选择

选项

描述

replicaSet=name

验证replica set的名称。 Impliesconnect=replicaSet.

slaveOk=true|false

1. true:在connect=direct模式下,驱动会连接第一台机器,即使这台服务器不是主。在connect=replicaSet模式下,驱动会发送所有的写请求到主并且把读取操作分布在其他从服务器。 2. false: 在 connect=direct模式下,驱动会自动找寻主服务器. 在connect=replicaSet 模式下,驱动仅仅连接主服务器,并且所有的读写命令都连接到主服务器。

safe=true|false

1. true: 在执行更新操作之后,驱动都会发送getLastError命令来确保更新成功。(还要参考 wtimeoutMS). 2. false: 在每次更新之后,驱动不会发送getLastError来确保更新成功

w=n

驱动添加 { w : n } 到getLastError命令. 应用于safe=true。

wtimeoutMS=ms

驱动添加 { wtimeout : ms } 到 getlasterror 命令. 应用于 safe=true.

fsync=true|false

1. true: 驱动添加 { fsync : true } 到 getlasterror 命令.应用于 safe=true. 2. false: 驱动不会添加到getLastError命令中。

mongodb命令

1. 显示所有数据的列表
		show dbs
2. 查看已存在的集合
		show collections
3. 显示当前数据库对象或集合
		db
4. 连接到一个指定的数据库(如果数据库不存在,则创建数据库,否则切换到指定数据库)
		use + 数据库名称
5. 创建数据库
		use 数据库名称
6. 删除数据库
		db.dropDatabase()
7. 删除集合
		db.collection.drop()
8. 创建集合
		db.createCollection(name, options)
		例子:
			db.createCollection("runoob")
			创建固定集合 mycol,整个集合空间大小 6142800 B, 文档最大个数为 10000 个
			db.createCollection("mycol", { capped : true, autoIndexId : true, size : 6142800, max : 10000 } 	
9. 插入文档
		db.COLLECTION_NAME.insert(document)
		或
		db.COLLECTION_NAME.save(document)
		
		例子:
			db.col.insert({title: 'MongoDB 教程', 
        description: 'MongoDB 是一个 Nosql 数据库',
        by: '菜鸟教程',
        url: 'http://www.runoob.com',
        tags: ['mongodb', 'database', 'NoSQL'],
        likes: 100
    	})
		
10. 查看已经插入的文档
		db.col.find()
		
11. 更新文档
		db.collection.update(
				<query>,
				<update>,
				{
         upsert: <boolean>,
         multi: <boolean>,
         writeConcern: <document>
         }
        )
    11.1 query : update的查询条件,类似sql update查询内where后面的。
    11.2 update : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的
    11.3 upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
    11.4 multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
    11.5 writeConcern :可选,抛出异常的级别。    
	
  	例子:
  	db.col.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB'}})


12. 删除文档
		db.collection.remove(
				<query>,
				{
				justOne: <boolean>,
				writeConcern: <document>
				}
			)
			
	例子:
  		db.col.remove({'title':'MongoDB 教程'})

13. 查询文档
		db.col.find().pretty()
		
		例子:
			db.col.find({$or:[{"by":"菜鸟教程"},{"title": "MongoDB 教程"}]}).pretty()
			db.col.find({"by":"菜鸟教程", "title":"MongoDB 教程"}).pretty()

14. 条件操作符
		想获取 "col" 集合中 "likes" 大于 100 的数据
			db.col.find({likes : {$gt : 100}})()
			相当于mysql: Select * from col where likes > 100;
		想获取"col"集合中 "likes" 大于等于 100 的数据
			db.col.find({likes : {$gte : 100}})
			相当于mysql:Select * from col where likes >=100;
		想获取"col"集合中 "likes" 小于 150 的数据
    	db.col.find({likes : {$lt : 150}})
    	相当于mysql: Select * from col where likes < 150;
    想获取"col"集合中 "likes" 小于等于 150 的数据
    	想获取"col"集合中 "likes" 小于等于 150 的数据
    	相当于mysql: 想获取"col"集合中 "likes" 小于等于 150 的数据
    想获取"col"集合中 "likes" 大于100,小于 200 的数据
    	db.col.find({likes : {$lt :200, $gt : 100}})
    	相当于mysql: Select * from col where likes>100 AND  likes<200;
    
15. $type操作符
		$type操作符是基于BSON类型来检索集合中匹配的数据类型,并返回结果。
		想获取 "col" 集合中 title 为 String 的数据
		db.col.find({"title" : {$type : 2}})
		或
		db.col.find({"title" : {$type : 'string'}})

16. Limit与Skip方法
		读取指定数量的数据记录
		db.COLLECTION_NAME.find().limit(NUMBER)
		例子:
			db.col.find({},{"title":1,_id:0}).limit(2)
		
		使用skip()方法来跳过指定数量的数据		
		db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER)

17. 排序
		 sort() 方法对数据进行排序,sort() 方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而 -1 是用于降序排列
		 db.COLLECTION_NAME.find().sort({KEY:1})

18. 索引
		使用 createIndex() 方法来创建索引
		db.collection.createIndex(keys, options)
		db.col.createIndex({"title":1})
		
19. 聚合
		聚合(aggregate)主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果。
		有点类似 SQL 语句中的 count(*)。
			db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)
		例子:	
			db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : 1}}}])

表达式

描述

实例

$sum

计算总和。

db.mycol.aggregate([{KaTeX parse error: Expected '}', got 'EOF' at end of input: …roup : {_id : "by_user", num_tutorial : {likes"}}}])

$avg

计算平均值

db.mycol.aggregate([{KaTeX parse error: Expected '}', got 'EOF' at end of input: …roup : {_id : "by_user", num_tutorial : {likes"}}}])

$min

获取集合中所有文档对应值得最小值。

db.mycol.aggregate([{KaTeX parse error: Expected '}', got 'EOF' at end of input: …roup : {_id : "by_user", num_tutorial : {likes"}}}])

$max

获取集合中所有文档对应值得最大值。

db.mycol.aggregate([{KaTeX parse error: Expected '}', got 'EOF' at end of input: …roup : {_id : "by_user", num_tutorial : {likes"}}}])

$push

将值加入一个数组中,不会判断是否有重复的值。

db.mycol.aggregate([{KaTeX parse error: Expected '}', got 'EOF' at end of input: …roup : {_id : "by_user", url : {url"}}}])

$addToSet

将值加入一个数组中,会判断是否有重复的值,若相同的值在数组中已经存在了,则不加入。

db.mycol.aggregate([{KaTeX parse error: Expected '}', got 'EOF' at end of input: …roup : {_id : "by_user", url : {url"}}}])

$first

根据资源文档的排序获取第一个文档数据。

db.mycol.aggregate([{KaTeX parse error: Expected '}', got 'EOF' at end of input: …roup : {_id : "by_user", first_url : {url"}}}])

$last

根据资源文档的排序获取最后一个文档数据

db.mycol.aggregate([{KaTeX parse error: Expected '}', got 'EOF' at end of input: …roup : {_id : "by_user", last_url : {url"}}}])

注意事项

1. 在 MongoDB 中,集合只有在内容插入后才会创建! 就是说,创建集合(数据表)后要再插入一个文档(记录),集合才会真正创建。
2.