MongoDB Cursor游标
MongoDB 游标方法修改指定查询的执行方式。以下是带有描述、语法和示例的游标方法列表。
一、cursor.addOption(flag)
该方法添加“OP_QUERY”有线协议标志。添加它是为了改变查询的行为,比如tailaible flag。
示例:
var t = db.myCappedCollection;
var cursor = t.find().
addOption(DBQuery.Option.tailable)
.addOption(DBQuery.Option.awaitData)
上面的示例添加了 tailable 标志和 awaitData 标志,以确保查询返回可尾游标。使用此方法将生成一个游标,在返回完整结果集后等待几秒钟。这样在查询期间它可以获取并返回附加数据。
二、cursor.batchSize(size)
来自MongoDB的批处理结果对象返回使用批量大小方法指定的文档数。在许多情况下,如果我们修改批量大小,它不会影响用户或应用程序。
示例:
db.inventory.find().batchSize(10)
输出结果为:
三、cursor.close()
该方法用于关闭游标并根据该方法的指令释放相关的服务器资源。游标将由剩余结果为零的服务器自动关闭或已空闲指定时间段。
示例:
db.collection.find(<query>).close()
四、cursor.collation(<collation document>)
MongoDB collation() 方法指定 db.collection.find() 返回的游标的排序规则。
close 方法接受的整理文档:
{
locale: <string>,
caseLevel: <boolean>,
caseFirst: <string>,
strength: <int>,
numericOrdering: <boolean>,
alternate: <string>,
maxVariable: <string>,
backwards: <boolean>
}
示例:
db.yiidian.find( { x: "a" } ).collation( { locale: "en_US", strength: 1 } )
输出结果为:
五、cursor.forEach(function)
JavaScript 函数将使用 forEach 方法通过光标应用于所有文档。
语法:
db.collection.find().forEach(<function>)
示例:
在 find() 方法返回的游标上调用 forEach() 方法以显示集合中所有用户的名称:
db.users.find().forEach( function(javaTpoint) { print( "user: " + editors.name ); } );
六、cursor.hint(index)
在查询过程中调用该方法来覆盖 MongoDB 的默认索引选择和查询优化过程。
示例:
使用 age 字段索引的用户集合中的所有文档都将使用下面的查询返回。
db.users.find().hint( { age: 1 } )
七、cursor.limit()
该方法用于指定游标返回的最大文档数。它将在游标中使用,与 SQL 数据库中的 LIMIT 语句相当。
示例:
db.collection.find(<query>).limit(<number>)
八、cursor.map(function)
map 方法由光标访问的文档使用,并将最近应用程序的返回值收集到一个数组中。
示例:
db.users.find().map(function(u) { return u.name; } );
九、cursor.max()
max 方法用于限制 find().max() 方法的结果。MongoDB 为特定索引指定了独占上限,该索引提供了一种为复合键索引指定上限的方法。
示例:
为集合创建以下索引:
db.products.createIndexes( [
{ "item" : 1, "type" : 1 },
{ "item" : 1, "type" : -1 },
{ "price" : 1 }])
如果您使用 { item: 1, type: 1 } 索引的顺序,则 max() 限制低于 item 等于 Mango 且类型等于
db.products.find().max( { item: 'Mango', type: 'Alfonso' } ).hint( { item: 1, type: 1 } )
十、cursor.min()
约束 find() 的结果。min() MongoDB 按顺序指定特定索引的下限。此方法提供了一种定义复合键索引下限的方法。
语法:
{ field1: <min value>, field2: <min value2>, fieldN:<min valueN> }
示例:
首先,创建一个名为 superstore 的样本集合,其中包含以下文档:
db.products.insertMany([
{ "_id" : 1, "item" : "Java", "type" : "book", "price" : NumberDecimal("1.09") },
{ "_id" : 2, "item" : "MongoDB", "type" : "book", "price" : NumberDecimal("1.9") },
{ "_id" : 3, "item" : "Homefoil","type" : "Utensil", "price" : NumberDecimal("1.2") },
{ "_id" : 4, "item" : "Handwash", "type": "Utensil", "price" : NumberDecimal("1.29") },
{ "_id" : 5, "item" : "Rice", "type" : "Grocery", "price" : NumberDecimal("1.59") },
{ "_id" : 6, "item" : "Mango", "type" : "Fruit", "price" : NumberDecimal("1.29") },
{ "_id" : 7, "item" : "Orange", "type" : "Fruit", "price" : NumberDecimal("2.99") },
{ "_id" : 9, "item" : "Apple", "type" : "Fruit", "price" : NumberDecimal("1.99") },
{ "_id" : 8, "item" : "Potato", "type" : "vegetable", "price" : NumberDecimal("0.99") },
{ "_id" : 10, "item" : "Onion", "type" : "vegetable", "price" : NumberDecimal("1.39") }
])
现在,为集合创建索引:
min() 方法使用 { item: 1, type: 1 } 索引的顺序将查询限制为文档。
db.products.find().min( { item: 'Java', type: 'book' } ).hint( { item: 1, type: 1 } )
十一、cursor.tailable()
tailable 方法将光标标记为可拖尾。它可以用作上限集合的扫描仪。即使到达集合的最后一个节点,它仍然保持打开状态。该方法的应用程序将随着新数据插入集合中而不断运行。
语法:
cursor.tailable( { awaitData : <boolean> } )
如果 awaitdata 标志设置为 true,MongoDB 会在等待新数据到达的游标到达上限集合的末尾时阻塞查询线程一段时间。当新数据插入到上限集合中时,被阻塞的线程被通知唤醒并将下一批返回给客户端。
十二、cursor.toArray()
该方法返回一个数组,其中包含所有属于游标的文档。它将所有文档加载到 RAM 中并通过完全迭代游标来耗尽游标。
示例:
var allProductsArray = db.products.find().toArray();
if (allProductsArray.length > 0) { printjson (allProductsArray[0]); }
热门文章
优秀文章