MongoDB批量插入

MongoDB批量插入,在某些情况下,您可能需要插入或摄取大量的数据到MongoDB数据库。这些批量插入有一些特殊的考虑,与其他写操作不同。 一、用insert()方法 insert()方法,当传递文档数组,执行批量插入,和原子插入每个文档。批量插入能用摊销写关注的成本显著的增加性能。 版本2.2更新,在2.2版本,insert()在mongo命令行获得了批量插入的支持。 在驱动程序中,你能为批量配置写关注而不是在单文档级别上。 在他们的插入操作中,驱动程序有一个ContinueOnError选项,所以一个插入失败,批量插入操 续插入剩下的文档。   注意:   如果在批量插入期间发生多个错误,客户端只收到最后一次发生的错误。   也可以查看:   在你的应用程序中执行批量插入的驱动文件的细节,也可以查看导入和导出MongoDB数据。 二、对分片集群批量插入 虽然在非分片集群上ContinueOnError是可选的,所有的批量插入用ContinueOnError到一个分片集合运行,他是不能被禁止的。 大批量插入操作,包括初始数据插入或常规数据导入,对于批量插入,可考虑以下策略: 预分割集合 如果分片集合为空,那么集合只有一个初始块,他驻留在一个单一的分片。然后MongoDB中必须花时间来接收数据,创建拆分,并分发拆分块到可用的分片。为了避免这种性能损失,作为一个分片集群分割大块的驻留你可以预先分割的集合。 插入到多个mon......

存储

一、数据模型 MongoDB以BSON文档的形式存储数据,它是Key的富映射,或字段名,值。BSON支持丰富的类型集 合,在BSON文档中的字段能包含数据值或内嵌的文档。在MongoDB中所有文档必须小于16MB,这 是BSON文档的大小。 在MongoDB中的每个文件存储在一个记录中它包括文档自身和额外的空间,或者说是填充,填充 因为结果更新文件增长。所有的记录位于连接的磁盘上,当一个文档变得比分配的记录大时, MongoDB必须分配一个新的记录。新的分配要求MongoDB移动一个文件,并更新引用文档的所有索 引,这比就地更新需要更多的时间,并导致存储碎片。 所有的记录都是一个集合的一部分,这是文献中MongoDB数据库的逻辑分组。在一个集合中的文 档共享一组索引,而且通常这些文档共享公共字段和结构。 在MongoDB中的数据库结构是一组相关的集合。每个数据库都有一个唯一的数据文件集,并且可 能包含大量的集合。此外,每个数据库都有一个唯一的写入锁,在写操作期间锁定写操作到数据 库,一个单独的MongoDB部署可能有很多的数据库。 二、日志 为了确保所有MongoDB修改的数据集被永久地写入到磁盘,MongoDB中记录所有修改到日志,写入磁盘比写入数据更频繁。该日志让MongoDB在mongod实例退出后成功恢复的数据文件中的数据,而不清除所有更改。 请参阅日记记录机制的有关MongoDB日志的详细信息。 ......

插入文档

在MongoDB中,b.collection.insert()方法添加新文档到一个集合。此外,无论是db.collection.update()方法和db.collection.save()方法也可以通过称为更新插入的操作添加新文档。更新插入既是执行一个已存在的文档更新,也是在修改文档不存在是插入一个新文档的操作。 本教程提供了使用中mongo命令行的三种方法插入操作的例子。 一、用insert()方法插入一个文档 下面的语句插入带有三个字段的文档到集合inventory: db.inventory.insert( { _id: 10, type: "misc", item: "card", qty: 15 } ) 在该示例中,文档有一个用户指定的值为10的_id字段。该值必须在集合inventory中是唯一的。 更多示例,请参阅insert()。 二、用update()方法插入一个文档 调用update()方法的更新插入标志,如果没有文件匹配更新的查询条件则创建一个新的文档。 [1] 下面的示例创建一个新的文档,如果在inventory集合中没有包含{ type: "books", item : "journal" }的文档: db.inventory.update(                      { type: "book", item : "journal" },                      { $set : { qty: 10 } },           &nb......

查询文档

在MongoDB中,db.collection.find()方法从集合中检索文档。[1] db.collection.find()方法返回一个游标来检索文档。 本教程提供了使用db.collection.find()方法在mongo shell读操作的例子。在这些例子中,检索文档包含它们的所有字段。限制从检索的文档返回的字段,查看限制字段从查询返回。   [1] db.collection.findOne()方法也执行读取返回一个单一的文档的操作。在内部,db.collection.findOne()方法是用db.collection.find()方法返回一个。 一、选择在一个集合中的所有文档 一个空的文档查询({}) 选择集合中的所有文档:   db.inventory.find( {} ) 不指定查询文档的find()方法等同于指定一个空的查询文档。因此,下面的操作等效于前面的操作:   db.inventory.find() 二、指定匹配条件 指定匹配条件,用查询文档 { <field>: <value> }选择包含具有指定值<field>: <value>的所有文档。 下面的示例检索inventory集合类型字段的值为小吃的所有文档: db.inventory.find( { type: "snacks" } ) 三、指定条件下使用查询运算符 在一个MongoDB查询中查询文档可以使用查询运算符来指定条件,下面的示例选择inventory集中类型字段的值是'食品'或'小吃'的所有文档: db.inventory.find( { type: { $in: [ 'food', 'snacks' ] } } ) 虽......

限制从一个查询返回的字段

映射指定规则限制从所有匹配文档返回的字段。映射接受从一个文档用纳入或排除的方式从结果集返回字段的列表。您也能指定字段包括(例如 { field: 1 })或者指定字段排除(例如 { field: 0 })。  重要提示  _id字段默信包括在结果集里。要从结果集里排除_id字段,你需要在文档映射里指定_id字段的排除(例如{ _id: 0 })。 除了_id字段,你不可能对包括和排除语义进行组合。 本教程提供各种查询限制匹配文档返回字段的例子。 在mongo命令行下教程的例子用的集合是inventory,方法是 db.collection.find()。 db.collection.find() 方法返回一个游标检索文档。实例的选择查询条件,查看查询文档。 一、在匹配的文档里返回所有的字段 如果你没有指定映射, find()方法返回所有查询到的匹配文档的所有字段。 db.inventory.find( { type: 'food' } )  这个操作返回inventory集合中type字段的值为"food"的所有文档。返回文档包括所有的字段。 二、只返回指定的字段和_id字段 映射可以明确地包含几个字段。在下面的操作中,find()方法返回查询匹配的所有文档。在结果集里,查询匹配的文档只有item和qty字段以及默认的_id字段返回。 db.inventory.find( { type: 'food' }, { item: 1, qty: 1 } ) 三、只返回指定字段 可以从结果中,通过指定排除在映射里移除_id字段,就像下面的例子: db.inventory.fi......
<<  1  2  3  4  5  >>
京ICP备14008139号-1