mongo命令行下迭代游标

db.collection.find()方法返回一个游标。要访问文档, 你需要遍历游标。然而,在mongo命令行,如果返回的游标使用var关键字没有赋值给一个变量,然后将游标会自动迭代20次,最多打印结果里拳20个文档。以下说明用手动迭代游标或使用迭代索引的方式来访问文档。 一、手动迭代游标 在mongo命令行下,当您分配从find()方法返回的游标给一个用var关键字命名的变量,游标不会自动迭代。 在mongo命令行下您可以调用游标变量迭代20次,然后打印匹配的文档,就像下面的例子: var myCursor = db.inventory.find( { type: 'food' } ); myCursor 您也可以使用游标的next()方法来访问文档,就像下机的例子: var myCursor = db.inventory.find( { type: 'food' } ); while (myCursor.hasNext()) {    print(tojson(myCursor.next())); } 作为一种替代的打印操作,考虑用printjson()辅助方法取代print(tojson()): var myCursor = db.inventory.find( { type: 'food' } ); while (myCursor.hasNext()) {    printjson(myCursor.next()); } 你可以使用游标的foreach()方法遍历游标访问文档,就像下面的例子: var myCursor =  db.inventory.find( { type: 'food' } ); myCursor.forEach(printjson); 游标方法的更多信息查看JavaScript游标方法和你......

分析查询性能

explain()游标方法允许你检查查询系统的操作。此方法用于分析查询的效率是有用的,以及用于确定查询如何使用索引。 explain() 方法测试查询操作,而不是对查询性能的计时。因为explain()尝试多个查询计划,它不反映查询性能的精确计时。 一、评估一个查询的性能 使用explain()方法,在find()方法返回一个游标时调用这个方法。     例如:   评估inventory集合type字段的一个查询,在type字段上有一个索引。   db.inventory.find( { type: 'food' } ).explain() 考虑下面的结果: {   "cursor" : "BtreeCursor type_1",   "isMultiKey" : false,   "n" : 5,   "nscannedObjects" : 5,   "nscanned" : 5,   "nscannedObjectsAllPlans" : 5,   "nscannedAllPlans" : 5,   "scanAndOrder" : false,   "indexOnly" : false,   "nYields" : 0,   "nChunkSkips" : 0,   "millis" : 0,   "indexBounds" : { "type" : [                           &......

修改文档

在MongoDB中, db.collection.update()和db.collection.save()方法修改在集合中已存在的文档。db.collection.update()提供了额外的修改控制。例如,您可以用db.collection.update()修改现有的数据或修改一组匹配查询的文档。此外,db.collection.save()替换具有相同_id字段的现有文档。 本文档提供了在mongo命令行下使用两个方法更新操作的例子。 一、用update()方法修改多个文档 默认情况下,update()方法更新与选择条件匹配到单一的文档。用multi选项设置为true调用update()方法来更新多个文档。 [1] db.inventory.update(    { type : "book" },    { $inc : { qty : -1 } },    { multi: true } ) 更多的例子,请参阅update()。 [1] 这显示了MongoDB 2.2及以后的语法。2.2版本之前的语法,请参阅update()。 二、用save()方法修改一个文档 save()方法可以替换一个现有的文档。替换一个文档用save()方法,用_id字段匹配一个现有的文档来进行修改。 下面的例子完全替换了在inventory集合中_id字段为10的一个文档: db.inventory.save(    {      _id: 10,      type: "misc",      item: "placard"    } ) 进一步的例子,请参阅save()。 ......

删除文档

在MongoDB中,db.collection.remove()方法将文档从一个集合中删除。你可以从一个集合,删除所有文档。删除符合条件的所有文档,或限制操作只删除一个文档。 本教程提供了在mongo命令任下使用db.collection.remove()方法删除操作的示例。 一、删除所有文档 从集合中删除所有的文档,传递一个空查询文档{}到remove()方法。remove()方法不会删除索引。 下面的例子将删除inventory集合的所有文档: db.inventory.remove({}) 从集合中删除所有的文档,还可以更有效地使用drop()方法来删除整个集合,包括索引,然后重建集合和重建索引。 二、删除匹配条件的文档 要删除匹配删除条件的文件,调用remove()方法加<query>参数。 下面的例子将删除inventory集合中类型字段等于食品的所有文档: db.inventory.remove( { type : "food" } ) 对于大的删除操作,可能是更有效的复制文档在一个新的集合,然后在原来的集合上使用drop()。 三、删除与条件匹配单个文件 要删除一个文件,调用remove()方法结合justOne参数设置为true或1。 下面的例子将删除inventory集合中类型字段等于食品的一个文档: db.inventory.remove( { type : "food" }, 1 ) 要按一些特定的顺序删除单个文档,请使用findAndModify()方法。 ......

执行两阶段提交

一、概要 本文档提供了多文档更新或“多文档事物处理”采用两阶段模式提交的方式将数据写入到多个文档。此外,你可以扩展这一过程,以提供回滚一样的功能。 二、背景 MongoDB数据库单一的文档操作总是原子的;然而,操作涉及多个文档,这些文件通常被称为“多文件事物处理”,不是原子的。由于文档可以是相当复杂的,包含多个“嵌套”的文件,单个文档原子为许多实用的用例的提供了必要的支持。 即使单文档的原子操作力,也存在需要多文档处理情况。当执行一个顺序操作组成的事务,某些问题发生,如:  原子性:如果一个操作失败,先前的操作在事务必须“回滚”到先前的状态(例如“nothing,”“all 或者 nothing”)。  一致性:如果一个主要失败(例如网络、硬件)中断事务,数据库必须能够恢复一致的状态。 对于需要多文档事物处理的情况下,可以实现两阶段提交您的应用程序提供这类多文档的更新支持。使用两阶段提交保证了数据的一致性,在出错的情况下,与此前的事物状态是可以恢复的。在该过程中,然而,文档可以表示待处理数据和状态。   请注意   在与MongoDB中因为只有单文档操作是原子,两阶段提交只能提供transaction-like语义。在两阶段提交或回滚时应用程序有可能返回中间点的中间数据。 三、模式 概述 考虑这样一个场景,您想从帐户转帐资金到账......
<<  1  2  3  4  5 
京ICP备14008139号-1