6.3删除
可以像查询一样指定条件来删除特定的文档。
6.4索引
可以像在一般的RDBMS中一样使用索引。提供了建立(一般、惟一、组合)索引、删除索引、重建索引等各种方法。索引信
息保存在集合“system.indexes”中。
6.5map/reduce
MongoDB提供了map/reduce方法来进行数据的批处理及聚集操作。和Hadoop的使用类似,从集合中接收输入,结果输出到
另一个集合。如果你需要使用group,map/reduce会是个不错的选择。但MongoDB中的索引和标准查询不是使用
map/reduce,而是与MySQL相似。
7模式设计
Mongo式的模式设计
使用Mongo有很多种方式,你本能上可能会像使用关系型数据库一样去使用。当然这样也可以工作得很好,但却没能发挥出
Mongo的真正威力。Monog是专门设计为富对象模型(richobject model)使用的。
例如:如果你建立了一个简单的在线商店并且把产品信息存储在关系型数据库中,那你可能会有两个像这样的表:
item
title
price sku
item_features
sku
feature_name feature_value
你进行了范式处理因为不同的物品有不同的特征,这样你不用建立一个包含所有特征的表了。在Mongo中你也可以像上面那
样建立两个集合,但像下面这样存储每种物品会更有效。
item : {
"title" : <title> ,
"price" : <price> ,
"sku" : <sku> ,
"features" : {
"optical zoom" : <value> ,
...
}
}
因为只要查询一个集合就能取得一件物品的所有信息,而这些信息都保存在磁盘上同一个地方,因此大大提高了查询的速度。
如果你想插入或更新一种特征,如db.items.update({ sku : 123 } , { "$set" : { "features.zoom" :"5" } } ),也不必在磁盘上移动整
个对象,因为Mongo为每个对象在磁盘上预留了空间来适应对象的增长。
8嵌入与引用
以一实例来说,假设需要设计一个小型数据库来存储“学生、地址、科目、成绩”这些信息,那么关系型数据库的设计如图1所
示,而key-value型数据库的设计则可能如图2所示。
图1关系型的数据库设计