MongoDB 是一个基于分布式文件存储
的数据库。由 C++ 语言编写。旨在为 WEB
应用提供可扩展的高性能数据存储解决方案。MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
分布式系统(distributed system)由多台计算机和通信的软件组件通过计算机网络连接(本地网络或广域网)组成。分布式系统是建立在网络之上的软件系统。正是因为软件的特性,所以分布式系统具有高度的内聚性和透明性。因此,网络和分布式系统之间的区别更多的在于高层软件(特别是操作系统),而不是硬件。分布式系统可以应用在不同的平台上如:Pc、工作站、局域网和广域网上等。
NoSQL,指的是非关系型的数据库。NoSQL有时也称作Not Only SQL的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称。
NoSQL用于超大规模数据的存储。(例如谷歌或Facebook每天为他们的用户收集万亿比特的数据)。这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。
今天我们可以通过第三方平台(如:Google,Facebook等)可以很容易的访问和抓取数据。用户的个人信息,社交网络,地理位置,用户生成的数据和用户操作日志已经成倍的增加。我们如果要对这些用户数据进行挖掘,那SQL数据库已经不适合这些应用了, NoSQL 数据库的发展却能很好的处理这些大的数据。
点击去官网下载对应版本mongo下载,linux版本下载完成解压即可!
Linux下命令安装:sudo yum install libcurl openssl
Mongo的默认端口是
27017
Mongo兼容Mysql的语句。
创建数据库:
# 如果数据库不存在,则创建数据库,否则切换到指定数据库。 use DATABASE_NAME;
查看数据库:
show dbs; # 示例 > show dbs admin 0.000GB config 0.000GB local 0.000GB >
删除数据库:
db.dropDatabase();
创建集合:
# name为表名 db.createCollection(name)
查看集合:
如果要查看已有集合,可以使用 show collections;或 show tables;命令:
删除集合:
# COLLECTION_NAME为集合名 db.COLLECTION_NAME.drop()
插入文档:
# 文档的数据结构和 JSON 基本一样。 # 所有存储在集合中的数据都是BSON格式。 # BSON 是一种类似 JSON 的二进制形式的存储格式,是 Binary JSON 的简称。 db.COLLECTION_NAME.insert(document) db.COLLECTION_NAME.save(document)
修改文档:
# 旧数据 新数据 db.code.update({name:"admin"},{$set:{name:"ichpan"}})
移除文档:
# COLLECTION_NAME为集合名 db.COLLECTION_NAME.remove({'title':'MongoDB 教程'})
查询数据:
# find() 方法可以传入多个键(key),每个键(key)以逗号隔开,即常规 SQL 的 AND 条件。 # 以易读的方式来读取数据 .pretty() # 除了 find() 方法之外,还有一个 findOne() 方法,它只返回一个文档。 # 查询集合中的所有数据 db.COLLECTION_NAME.find().pretty() # 根据查询集查询 query为BSON格式 db.COLLECTION_NAME.find(query).pretty() 备注:mongo中也可以使用逻辑运算符查询数据。
MongoDB 条件操作符:
创建索引:
# Key值为你要创建的索引字段,1为指定按升序创建索引,按降序来创建索引指定为-1 db.COLLECTION_NAME.createIndex(keys, options) # 创建一个过期索引 设置expireAfterSeconds # datetime: 创建索引所在的字段 为date形式 # expireAfterSeconds:为过期时间 表示300秒后删除数据 db.code.createIndex({"datetime":1},{expireAfterSeconds:300});
createIndex() 接收可选参数,参数如下:
Parameter | Type | Description |
---|---|---|
background | Boolean | 建索引过程会阻塞其它数据库操作,background可指定以后台方式创建索引,即增加 “background” 可选参数。 “background” 默认值为false。 |
unique | Boolean | 建立的索引是否唯一。指定为true创建唯一索引。默认值为false. |
name | string | 索引的名称。如果未指定,MongoDB的通过连接索引的字段名和排序顺序生成一个索引名称。 |
dropDups | Boolean | **3.0+版本已废弃。**在建立唯一索引时是否删除重复记录,指定 true 创建唯一索引。默认值为 false. |
sparse | Boolean | 对文档中不存在的字段数据不启用索引;这个参数需要特别注意,如果设置为true的话,在索引字段中不会查询出不包含对应字段的文档.。默认值为 false. |
expireAfterSeconds | integer | 指定一个以秒为单位的数值,完成 TTL设定,设定集合的生存时间。 |
v | index version | 索引的版本号。默认的索引版本取决于mongod创建索引时运行的版本。 |
weights | document | 索引权重值,数值在 1 到 99,999 之间,表示该索引相对于其他索引字段的得分权重。 |
default_language | string | 对于文本索引,该参数决定了停用词及词干和词器的规则的列表。 默认为英语 |
language_override | string | 对于文本索引,该参数指定了包含在文档中的字段名,语言覆盖默认的language,默认值为 language. |
将mongo封装成类,使用的时候调用即可。
import pymongo import pytz # 时区 class MongoDB: def __init__(self): self.client = pymongo.MongoClient(host="127.0.0.1", port=27017, tz_aware=True, tzinfo=pytz.timezone("Asia/Shanghai")) self.db = self.client.mytornado self.table = self.db.code def insert_one(self, data): return self.table.insert_one(data) def find_one(self, data): return self.table.find_one(data) def find_many(self, data): return self.table.find_many(data) def remove(self, data): return self.table.remove(data) def update(self, old_data, new_data): return self.table.update(new_data)
mongo使用广泛,成本是低于Redis的,很多公司都是用的是Mongo数据库,我们今天了解了它的历史,基本使用,更多高阶的操作还是得慢慢去看官方文档,感谢观看。