MongoDB 快速上手

说在前面

虽然汉语是母语,理解起来比较快速。但是有时候有些常用词没有必要翻译,翻译了反而造成不必要的麻烦,mongodb 里面的关键性的术语,我都不会翻译,直接用英文。写成全英文,不是不可以,只是始终读起来反应速度要比读中文慢一点,即使是我自己写的英文。

基本概念

参考文献:https://docs.mongodb.com/manual/introduction/

mongo 是文档型数据库,其数据结构都是 field + value 的键值对的形式。外形类似于 JSON,但其实是 BSON 格式(也就是二进制的 JSON,其中,BSON 的字符串采用 UTF-8 编码)。
MongoDB 快速上手_第1张图片
一个 BSON document

所有的 BSON document 被存放在 collection 里。然后 collection 放在数据库里。
MongoDB 快速上手_第2张图片
一个 collection

运行 mongo,进入交互界面。首先在命令行里熟悉一下:

help;
show dbs; # 显示所有数据库
use db_name; # 切换或者创建数据库
# 再次 show dbs 不会显示这个新数据库,需要插入数据才行

插入数据前,先建立 collection。

db.createCollection('staff')

插入单条的 document:

db.staff.insertOne({'name': 'Sue', 'age': 29})

插入多条 ducuments:

db.staff.insertMany([
    {'name': 'Eloisa', 'age':27},
    {'name': 'Brandy', 'age':26},
    {'name': 'Dora', 'age': 24, 'gender': 'female'}
])

值得一提的是,就算突然多加入了一个 field 也不会对原有数据造成影响。
这是查找 Dora 这条数据的两个方法。

db.staff.find({'name':'Dora'})
db.staff.find({'gender':'female'})

唯一索引

作用就是防止添加含有重复的键的数据到数据库。例如确保 collection "lagou_items" 的键 "positionId" 保持唯一。只看键是否重复,不看值。

db.lagou_items.createIndex({'postionId': 1}, {'unique': true})
db.lagou_items.insertOne({'positionId': 666}) # 正常
db.lagou_items.insertOne({'positionId': 888}) # 报错 E11000 duplicate key error collection

PyMongo

参考文献:http://api.mongodb.com/python/current/tutorial.html

和本地的 mongo 数据库连接。

from pymongo import MongoClient
client = MongoClient()
client.database_names() # 返回现有的数据库
# ['admin', 'config', 'local', 'weng']
db = client.weng # weng 是一个 db 的名字

插入数据。和 mongo 本身的写法非常相似,但是 insert_one 的命名方式延续了 Python 的风格。注意这里插入的不是 JSON 或 BSON,而是 dict 对象。

db.jobs.insert_one({'Michael': 25}) # 返回

新插入的数据默认情况下自带一个 _id 字段。我先来试着搜一下刚刚放进去的数据:

>>> db.staff.find_one()
{'_id': ObjectId('5b05602efc68c46bb1aa61e9'), 'age': 29.0, 'name': 'Sue'}

>>> db.staff.find_one({'name':'brandy'})

>>> db.staff.find_one({'name':'Brandy'})
{'_id': ObjectId('5b0560d1fc68c46bb1aa61eb'), 'age': 26.0, 'name': 'Brandy'}

从上面可以看出,find_one 无参数时返回整个 collection 的第一项。查询的时候是区分大小写的。

以上都是最最基础的几条命令,学会了之后继续拓展只是一个查文档+重复+记忆的过程了。此外,还有必要刻意比较一下 sql 和 nosql 数据库的差异。来日却来理会。

Until then,
Happy hacking!

你可能感兴趣的:(MongoDB 快速上手)