zoukankan      html  css  js  c++  java
  • mongodb基础

    MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。在高负载的情况下,添加更多的节点,可以保证服务器性能。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。

    MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。

    MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。

    SQL术语/概念MongoDB术语/概念解释/说明
    database database 数据库
    table collection 数据库表/集合
    row document 数据记录行/文档
    column field 数据字段/域
    index index 索引
    table joins   表连接,MongoDB不支持
    primary key primary key 主键,MongoDB自动将_id字段设置为主键

    下表列出了 RDBMS 与 MongoDB 对应的术语:

    RDBMSMongoDB
    数据库 数据库
    表格 集合
    文档
    字段
    表联合 嵌入文档
    主键 主键 (MongoDB 提供了 key 为 _id )

    1、创建数据库

    use runoob
    runoob是数据库的名字,如果不存在会创建该数据,存在则切换到该数据库

    2、创建集合
    db.createCollection("mycollection")
    mycollection是集合的名字
    在 MongoDB 中,你不需要创建集合。当你插入一些文档时,MongoDB 会自动创建集合。
    db.mycol2.insert({"name" : "老K"})
    mycol2如果不存在则会自动创建。
    db.mycol2.drop();删除集合。
    3、插入文档
    db.mycol2.insert({title: 'MongoDB 教程', description: 'MongoDB 是一个 Nosql 数据库', by: '菜鸟教程', url: 'http://www.runoob.com', tags: ['mongodb', 'database', 'NoSQL'], likes: 100 })
     
    4、更新文档
    db.mycol2.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB'}})
    以上语句只会修改第一条发现的文档,如果你要修改多条相同的文档,则需要设置 multi 参数为 true。
    db.mycol2.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB'}},{multi:true})
    5、删除文档
    db.mycol2.remove({'title':'MongoDB 教程'})
    如果想删除集合中所有的数据,可以使用
    db.mycol2.remove({})
    6、查询

    MongoDB 与 RDBMS Where 语句比较

    如果你熟悉常规的 SQL 数据,通过下表可以更好的理解 MongoDB 的条件语句查询:

    操作格式范例RDBMS中的类似语句
    等于 {<key>:<value>} db.col.find({"by":"菜鸟教程"}).pretty() where by = '菜鸟教程'
    小于 {<key>:{$lt:<value>}} db.col.find({"likes":{$lt:50}}).pretty() where likes < 50
    小于或等于 {<key>:{$lte:<value>}} db.col.find({"likes":{$lte:50}}).pretty() where likes <= 50
    大于 {<key>:{$gt:<value>}} db.col.find({"likes":{$gt:50}}).pretty() where likes > 50
    大于或等于 {<key>:{$gte:<value>}} db.col.find({"likes":{$gte:50}}).pretty() where likes >= 50
    不等于 {<key>:{$ne:<value>}} db.col.find({"likes":{$ne:50}}).pretty() where likes != 50
     
     
     
     

    ObjectId

    
    

    ObjectId 类似唯一主键,可以很快的去生成和排序,包含 12 bytes,含义是:

    
    
    • 前 4 个字节表示创建 unix 时间戳,格林尼治时间 UTC 时间,比北京时间晚了 8 个小时
    • 接下来的 3 个字节是机器标识码
    • 紧接的两个字节由进程 id 组成 PID
    • 最后三个字节是随机数
    
    

    
    

    MongoDB 中存储的文档必须有一个 _id 键。这个键的值可以是任何类型的,默认是个 ObjectId 对象

    
    

    由于 ObjectId 中保存了创建的时间戳,所以你不需要为你的文档保存时间戳字段,你可以通过 getTimestamp 函数来获取文档的创建时间:

    
    
    > var newObject = ObjectId()
    > newObject.getTimestamp()
    ISODate("2017-11-25T07:21:10Z")
    
    
     
     
    所谓“面向集合”(Collection-Oriented),意思是数据被分组存储在数据集中,被称为一个集合(Collection)。每个集合在数据库中都有一个唯一的标识名,并且可以包含无限数目的文档。集合的概念类似关系型数据库(RDBMS)里的表(table),不同的是它不需要定义任何模式(schema)。Nytro MegaRAID技术中的闪存高速缓存算法,能够快速识别数据库内大数据集中的热数据,提供一致的性能改进。
    
    
    模式自由(schema-free),意味着对于存储在mongodb数据库中的文件,我们不需要知道它的任何结构定义。如果需要的话,你完全可以把不同结构的文件存储在同一个数据库里。
    
    
    存储在集合中的文档,被存储为键-值对的形式。键用于唯一标识一个文档,为字符串类型,而值则可以是各种复杂的文件类型。我们称这种存储形式为BSON(Binary Serialized Document Format)
    
    
    MongoDB已经在多个站点部署,其主要场景如下:
    
    
    1)网站实时数据处理。它非常适合实时的插入、更新与查询,并具备网站实时数据存储所需的复制及高度伸缩性。
    
    
    2)缓存。由于性能很高,它适合作为信息基础设施的缓存层。在系统重启之后,由它搭建的持久化缓存层可以避免下层的数据源过载。
    
    
    3)高伸缩性的场景。非常适合由数十或数百台服务器组成的数据库,它的路线图中已经包含对MapReduce引擎的内置支持。
    
    
    不适用的场景如下:
    
    
    1)要求高度事务性的系统。
    
    
    2)传统的商业智能应用。
    
    
    3)复杂的跨文档(表)级联查询。
    
    
     
     


  • 相关阅读:
    C++: Ctor
    C++: RVO( return value optimization)
    alg_DP: LCS ( longest common substring )
    C++: TypeList
    android sdk入门(1)
    Ext.net 动态生成控件
    MVC常用控件
    学习MVC第一个增删修功能的本记
    学习MVC第二个实例登录代码(Model数据验证)
    在asp.net中使用自定义事件(带参数)
  • 原文地址:https://www.cnblogs.com/KQNLL/p/11844852.html
Copyright © 2011-2022 走看看