美文网首页我爱编程
MongoDB 快速上手

MongoDB 快速上手

作者: Paycation | 来源:发表于2018-05-23 21:11 被阅读26次

    说在前面

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

    基本概念

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

    mongo 是文档型数据库,其数据结构都是 field + value 的键值对的形式。外形类似于 JSON,但其实是 BSON 格式(也就是二进制的 JSON,其中,BSON 的字符串采用 UTF-8 编码)。 一个 BSON document 所有的 BSON document 被存放在 collection 里。然后 collection 放在数据库里。 一个 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 快速上手

        本文链接:https://www.haomeiwen.com/subject/bfrdjftx.html