MongoDB基本用法

一、安装运行:

下载安装包解压后,默认安装目录为:

cd /usr/local/mongodb/bin/
./mongod

解压后默认不带配置文件,可以自行新建一个配置文件,其中需要配置以下几个配置项:

cd mongodb/bin/
vi mongodb.conf

mongodb.conf 的内容:

# 数据文件存放路径:
dbpath = /opt/data/db

# 日志文件存放目录:
logpath = /opt/mongodb/logs/mongodb.log

# 以守护进程的方式运行:
fork = true

# 远程连接:
bind_ip = 0.0.0.0

新建log文件:

cd /opt/
mkdir data/db
mkdir mongodb/logs

以后台方式启动mongodb:

./mongod --config mongodb.conf

mongodb服务的默认端口号是: 27017

更多的参数选项,使用help方式查看:

./mongod --help

启动客户端:

./mongo

show dbs

二、MongoDB概念解析(MongoDB中的术语与SQL的比较):

database	:	数据库								---	database
collection	:	表(集合)							---	table
document	:	记录行(文档)						---	row
field		:	域(数据字段)(列)					---	column
index		:	索引									---	index
primary key	:	主键(MongoDB默认将_id字段设置为主键)	---	primary key
  1. 数据库:database:

    show dbs  /  show databases    # 查看所有数据库
    
    use <db_name>		# 选择使用某个数据库,如果没有则创建
    

    有三个数据库是保留的:

    admin:	root数据库
    config:	用于保存分片的相关信息
    local: 这个数据库永远不会被复制,用于存储仅限于本地单台服务器的数据
    
  2. 文档:document:(相当于SQL中的行row,表中的一个元素)

    文档是一组键值对(key-value)。
    MongoDB中的文档不需要设置相同的字段,并且相同的字段不需要相同的数据类型,这是与关系数据库最大的区别,也是MongoDB非常突出的特点。

  3. 集合:collection:(相当于SQL中的表)

    集合没有固定的结构,可以插入不同格式和类型的数据到集合中。

  4. ObjectID:唯一主键:

    MongoDB中的主键不是简单的1,2,3,4, ObjectID是一个 12 byte 的字符串,包含:

    创建时的Unix时间戳(4 byte) + 机器识别码(3 byte) + 进程ID(2 byte) + 随机数(3 byte)
    

    MongoDB中的每个文档都必须有一个主键。ObjectID类型的主键可以很快的查找和排序。并且由于ObjectID中保存了时间戳,所以不需要人为的为文档去单独的保存时间戳字段,可以通过 getTimestamp() 函数获取文档的创建时间。


三、MongoDB的连接:

(待补充)


四、常用命令:

1. 创建数据库:

use runoob

use <db_name>

use指令,如果数据库不存在,则创建数据库;
如果数据库存在,则切换到这个数据库。

注意:此时runoob数据库不是真正的创建(show dbs命令是看不到这个数据库的),mongodb只有在向数据库中插入内容后才会真正的创建数据库,所以我们还需要插入数据:

db.runoob.insert({"name": "菜鸟教程"})

mongodb默认数据库为test,如果没有创建新的数据库,则默认将数据存放到test库中。

2. 删除数据库:

use runoob
db.dropDatabase()

想要删除一个数据库,必须先use进入这个库,否则直接调用dropDatabase删除的是默认的test库。

3. 创建集合:

db.createCollection(name, options)

例如:
db.createCollection("runoob")
db.createCollection("runoob", {capped: true, size: 6142800, max: 10000})

name: 要创建的集合的名称;
option:可选,其中:
(1) capped:bool型,表示是否固定集合的大小,=true时为固定,此时必须指定size参数;
(2)size:数值,为固定大小的集合指定一个字节数;
(3)max:数值,指定固定大小的集合中包含的文档的最大数量(document);

Tips:
固定集合创建后其中的文档就不能被修改或删除,只能对集合删除重建。
(固定集合的特性参见第7点)

查看已有集合:

show collections   /   show tables   

4. 删除集合:

db.runoob_collection.drop()

db.<collection_name>.drop()

5. 插入文档:

mongodb中的文档(document)的数据结构和JSON基本一样,存储的格式是BSON(Binary JSON, 一种二进制形式的存储格式)。

db.<collection_name>.insert(<document>)

db.<collection_name>.find()		# 查看这个集合中已插入的文档

6. 更新文档:

db.<collection_name>.update({"title": "123"}, {$set: {"title": "456"}})

db.<collection_name>.update({"title": "123"}, {$set: {"title": "456"}}, {multi: true})

7. 删除文档:

db.<collection_name>.remove({"title": 123"})	#删除指定的这条文档

db.<collection_name>.remove({ })				#删除所有

Tips:
固定集合创建之后其中的文档就不能被修改或者删除,只能对集合删除重建。
对其操作时将会报错:

"cannot remove from a capped collection"

固定集合(capped collection)的特性:

创建之后就不能被改变,只能将其删除重建。

设计固定集合这种形式的数据结构是为了保存 日志文件、聊天记录、通话信息记录 等,这些数据有几个共同的特点:
(1)保存后不会被修改;
(2)只需要保存一段时间,存储空间满了就覆盖写。

固定集合的优点:

(1)写入速度提升:只需要往磁盘中的固定空间顺序写,不需要建立索引,不会被其他写操作中断;
(2)不需要配置额外的工作来管理旧文档的删除:覆盖写即可,在实现上类似一个循环队列。

如何查看一个集合是否为固定集合:

db.<collection_name>.isCapped()  	# 如果是固定集合则返回true

8. 查询文档:

db.<collection_name>.find()						# 查询集合中的所有文档
db.<collection_name>.find({"title": "123"})		# 带查询条件的查找(类似于SQL中的where过滤)

db.<collection_name>.find().pretty()				# 更加美观的显示,不至于太紧凑

9. 条件操作符:

mongodb中的条件操作符有:

>		大于			$gt		(Greate Than)
<		小于			$lt		(Lower Than)
>=		大于等于		$gte	(Greater Than and Equal)
<=		小于等于		$lte	(Lower Than and Equal)

举例:

# 先插入几个数据:
db.runoob_tb.insert({"title": "123", "num": 100})
db.runoob_tb.insert({"title": "456", "num": 200})
db.runoob_tb.insert({"title": "789", "num": 300})

db.runoob_tb.find({num: {$gt: 100}})
db.runoob_tb.find({num: {$lte: 200}})

10. limit 和 skip用法:

limit:使用find时读取【指定数量】的数据记录;
skip:使用find时【跳过】指定数量的数据记录。

db.runoob_tb.find().limit(10);						#只显示前10条
db.runoob_tb.find({"key": "hello"}).skip(1);			#跳过查找到的第一个
db.runoob_tb.find({"key": "hello"}).limit(1).skip(1);	#跳过第一个只显示一个

skip的默认参数是0,limit如果不设置参数则默认显示集合中的所有数据。

11. sort() 排序方法:

举例:

db.runoob_tb.find().sort({"num": 1})		#按照num列进行排序,1表示升序排列
db.runoob_tb.find().sort({"num": -1})	##按照num列进行排序,-1表示降序排列

12. 索引:

索引的作用就是提高查询的效率:
如果没有索引,要想查询数据就要遍历所有文档。

mongodb的索引是如何实现的:
对数据库的集合中的一列或者多列排序,然后存储在另一个单独的集合中。

如何创建索引:

db.runoob_tb.createIndex({key}, {option})

举例:

db.runoob_tb.createIndex({"key": 1})		#按升序创建索引
db.runoob_tb.createIndex({"key": -1})		#按降序创建索引

db.runoob_tb.createIndex({"key_1": 1, "key_2": -1})	#类似于SQL中的复合索引

db.runoob_tb.createIndex({"key_1": 1}, {background: true})	#创建索引的操作在后台执行。默认选项是false,此时创建索引会阻塞其他数据库操作

db.runoob_tb.createIndex({"key": 1}, {background: true, unique: true, name: "num_index"})	
#unique:bool型,默认false,指示建立的索引是否为唯一索引
#name:string型,指示建立的索引的名称。如果未指定,mongodb根据连接索引的字段名和排序顺序生成一个索引名称
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值