首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > 其他数据库 >

MongoDB Inserting 安插数据

2012-08-09 
MongoDB Inserting 插入数据MongoDB Inserting 插入数据当我们要向MongoDB插入数据,数据格式就是document。

MongoDB Inserting 插入数据

MongoDB Inserting 插入数据

当我们要向MongoDB插入数据,数据格式就是document。

document的数据结构和JSON基本一样。

Python的dictionaries和ruby的hashes都是例子。 这个部分主要讲解MongoDB数据的插入。

Document-Orientation面向文档面向文档的数据库存储document,但是这个document是一个结构document。这个词汇可能来自XML document。然而其他结构的数据格式如JASON,有相似的属性。

?

MongoDB的document是类似JSON的数据结构。 JSON 是一个存储对象风格数据绝佳方法。它独立于语言以及基于标准的。为了效率,MongoDB使用的是BSON。是一个二进制描述数据的协议。BSON检索字段要明显快于JSON。同时BSON也添加了更多的数据类型如date类型和二进制类型。BSON读起来和JSON一样并且也可以和其他多种语言的数据结构相对应。

?

客户端驱动序列化数据为BSON。之后再把数据传输到db中。

存储在硬盘上的数据格式就是BSON。获取的时候,也不要太复杂,效率很高。

客户端驱动反序列化BSON对象,转为自己语言的格式。

JSON

举例,下列 "document" 可以被存储在MongoDB中:

{ author: 'joe',  
created : new Date('03/28/2009'),  
title : 'Yet another blog post',  
text : 'Here is the text...',  
tags : [ 'example', 'joe' ],  
comments : [ { author: 'jim', comment: 'I disagree' },              
             { author: 'nancy', comment: 'Good post' }  
            ]
}

这个文档是一个blog post。因此我们可以把它保存到posts collection中。

> doc = { author : 'joe', created : new Date('03/28/2009'), ... }
> db.posts.insert(doc);

MongoDB了解BSON对象内部构造-不仅仅存储它们。可以通过内部字段和索引来进行查询。如

> db.posts.find( { "comments.author" : "jim" } )

意思就是 "查询评论作者为jim的posts"。

有好的MongoDB Schema

MongoDB可以用在很多的场景,并且使用起来和关系型数据库还是很相似的。

MongoDB设计的目标是存储复杂对象。

存储的例子

如果你要创建一个在线商店并且进行买卖。关系型设计如下

  item     title     price     sku  item_features     sku    ?
feature_name     feature_value


有可能要进行范式化,因为不同的items有不同的features,并且你不想在一张表保存所有的features。在MongoDB中很容易做到,还更有效率。
  item : {           
"title" : <title> ,          
 "price" : <price> ,           
"sku"   : <sku>   ,           
"features" : {              
"optical zoom" : <value> ,              ...          
 }  }

这样做有几个优点

  • 一条语句查询出整个记录。
  • 保存一个item的所有数据都保存在相同的硬盘空间上。只需要一次查找就可以了。

    看起来还有一些的问题

    • 你可能向插入或更新一个文档。MongoDB可以操作内嵌document
      db.items.update( { sku : 123 } , { "$set" : { "features.zoom" : "5" } } )
    • 添加一个feature需要在硬盘上移动整个对象么?答案是不。
    • MongoDB会预留空间给要增长的对象。 这样做还能避免索引更新。

热点排行