添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

MongoDB - 文档数据库

MongoDB 是一个开源的跨平台的文档数据库,属于 NoSQL 数据库分类。MongoDB 避开了传统的关系型数据库结构,使用类JSON的动态文档,使得数据的整合更快更简单。 [1]

主要功能

与存储标题和作者在两个关系型结构中不同,在 MongoDB 中可以把标题,作者和其他标题相关的信息都存储在一个名为Book中的单个文件。
MongoDB 支持通过字段,范围,正则表达式查询。查询可以返回的文档的特定字段,并且还包括用户定义的JavaScript函数。
MongoDB 文件中的所有字段都可以索引
MongoDB 提供了高可用的复制,一个复制集包含两个或多个数据副本。 每个副本可以在任何时间成为主副本或者从副本。主副本提供读和写,从副本保持从主副本复制数据。当主副本下线,从副本将自动成为主副本。
MongoDB 可以运行在多个服务器,负载均衡和复制数据,保证系统启动并在出现硬件故障时运行。
MongoDB 可以作为一个文件系统使用,有利于负载均衡和数据复制。这个功能,称为 GridFS,被包含在MongoDB 驱动中。
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv 7F0CEB10
echo "deb http://repo.mongodb.org/apt/debian wheezy/mongodb-org/3.0 main" >> /etc/apt/sources.list.d/mongodb-org-3.0.list
apt-get update
apt-get install mongodb-org
文档是 MongoDB 中数据的基本单元,非常类似于关系数据库中的行。 文档是键值对的一个有序集,键是字符串,值可以是多种不同的数据类型。 文档必须有一个 _id 键。键的值默认是ObjectId类型
集合是一组文档,相当于表。在一个集合里面,文档的 _id 是唯一的。
多个集合组成数据库

CRUD 操作

db.test.insert({“”:}) 插入的数据必须小于16M
db.test.remove({“”:}) emove函数接受键值参数作为删除条件

$set 用来更新一个键的值,如果键不存在,则创建。 db.blog.update({“_id”:ObjectId(“5603697db13466f29ba8e673”)},{“$set”:{“fa”:”War and peace”,”wow”:”lol”}})

  • $unset

    $unset 用来清除一个键值 db.blog.update({“_id”:ObjectId(“5603697db13466f29ba8e673”)},{“$unset”:{“fa”:1}})

    $inc 用来增加一个键的值,如果键不存在,则创建。 db.blog.update({“_id”:ObjectId(“5603697db13466f29ba8e673”)},{“$inc”:{“fa”:55}})

  • upsert

    将 update 的第三个参数设置为 true upsert 可以避免竟态问题 db.blog.update({“_id”:ObjectId(“5603697db13466f29ba8e673”)},{“$inc”:{“fa”:55}}, true)

  • 更新多个文档

    update默认情况只能对符合匹配条件的第一个文档执行更新。 要更新多个文档需要将 update 的第四个参数设置为 true db.blog.update({“title” : “second blog post”},{“$set”:{“123”:456}},true,true)

    返回键值包含 {“age”:27} 的文档

    db.blog.find({“title”:”second”, “age”:27})

    返回键值包含{“title”:”second”} AND {“age”:27} 的文档

    find 的第二参数用于限定要返回的文档的键值。

    db.blog.find({“title” : “second blog post”}, {“conntent”:1})

    返回值仅包含 _id 和 conntent 键

    db.blog.find({“title” : “second blog post”}, {“conntent”:0, “title”:0})

    返回值不包含 conntent 和 title 键

    $lt $lte $gt $gte $ne 对应 < <= > >= ≠

    db.blog.find({“age”:{“$gte”:18,”$lt”:30}})

    返回 age 大于18小于30的文档

    文件存取操作

    文件存取基于二进制数据类型,下面用 python 进行文件存储操作

    from pymongo import MongoClient
    client = MongoClient()
    db = client.test
    from bson import binary
    file = open('test.txt', 'rb')
    bin = binary.Binary(file.read())
    db.test.insert({"file":bin})
    file.close()
    
    cursor = db.test.find()
    for document in cursor:
    print (document)
    
    cursor = db.test.find_one()
    file = open("buff.txt","wb")
    file.write(cursor['file'])
    file.close()
    

    Gridfs是用来支持大小超过16MB的文件的,不超过16M的文件存成文档就行了。Gridfs 的理念是:将大文件分割为多个块,将每个块作为独立的文档进行存储。

    mongofiles put index-bottom.png
    mongofiles list
    mongofiles gett index-bottom.png
    [1]MongoDB - Wikipedia, the free encyclopedia
    
  •