Mongodb使用killCursors停止运行的cursor

cursor指向查询结果的游标,通过游标向下移动,获得下一条查询结果。MongoDB分批向用户返回数据结果。通过游标的移动, mongodb确定当前返回结果的位置,是否要加载更多数据到内存当中。cursor有默认的超时时间, 超时后cursor会自动停止。当然,用户也可以手动使用killCursors命令,停止未完成的cursor.

killCursors功能

停止指定的游标或某个集合的游标。

各种Mongodb连接工具,基于killCursors命令,实现游标的部分操作。应用程序中,通常应用不会直接调用killCursors命令,而是数据库管理或开发人员,来运行killCurors命令,停止掉对数据库性能产生影响或长时间运行的cursor。

为了减少影响,降低风险,执行killCursors命令必须在当前集合所在的数据库中执行。

语法

复制代码
db.runCommand({    
	killCursors: <collection>,    
  cursors: [<cursor id1>, ...],    
  comment: <any>
})

其中,使用killCursors指定本次操作针对的集合名称。 字段cursors包含cursor id数组。comment是可选字段,用户对本次操作的一些备注和说明。可以是BSON类型中的任何一种数据类型。添加备注说明时,可以在下面的三个位置查看

  • Mongodb日志中,attr.command.cursor.comment字段
  • Database profile输出的command.comment字段
  • currentOp输出的command.comment字段

用户权限

使用killCursors时,用户需要拥有相应的权限。

停止当前用户创建的游标

  • 4.2及以后得版本,当前用户有权限停止自己创建的游标。当用户使用查询语句创建游标时,游标即与当前用户建立关联关系
  • 4.0及以前版本,用户需要有killCursors权限,才能停掉自己创建的游标。同样,与4.2版本想用,用户使用查询语句创建游标时,游标即与当前用户建立关联关系。

停止其他用户创建的游标

用户需要有killAnyCursor权限

应用举例

  • 创建游标

    use test

    db.runCommand({
    find: "resturants",
    filter: {stars: 5},
    projection: {
    name:1,
    rating: 1,
    address:1
    },
    sort: { name: 1},
    batchSize: 5
    })

    //返回
    {
    "waitedMS" : NumberLong(0),
    "cursor" : {
    "firstBatch" : [{
    "_id" : ObjectId("57506d63f578028074723dfd"),
    "name" : "Cakes and more"
    },{
    "_id" : ObjectId("57506d63f578028074723e0b"),
    "name" : "Pies and things"
    },{
    "_id" : ObjectId("57506d63f578028074723e1d"),
    "name" : "Ice Cream Parlour"
    },{
    "_id" : ObjectId("57506d63f578028074723e65"),
    "name" : "Cream Puffs"
    },{
    "_id" : ObjectId("57506d63f578028074723e66"),
    "name" : "Cakes and Rolls"
    }],
    "id" : NumberLong("18314637080"),
    "ns" : "test.restaurants"
    },
    "ok" : 1
    }

  • 使用killCursors停止游标

    use test
    db.runCommand({
    killCusors: "restaurants",
    cusors: [NumberLong("18314637080")]
    })

相关推荐
DashVector3 小时前
向量检索服务 DashVector产品计费
数据库·数据仓库·人工智能·算法·向量检索
KYGALYX4 小时前
在Linux中备份msyql数据库和表的详细操作
linux·运维·数据库
檀越剑指大厂4 小时前
金仓KReplay:定义数据库平滑迁移新标准
数据库
努力成为一个程序猿.4 小时前
【Flink】FlinkSQL-动态表和持续查询概念
大数据·数据库·flink
毕设十刻5 小时前
基于Vue的学分预警系统98k51(程序 + 源码 + 数据库 + 调试部署 + 开发环境配置),配套论文文档字数达万字以上,文末可获取,系统界面展示置于文末
前端·数据库·vue.js
liliangcsdn6 小时前
如何利用约束提示优化LLM在问题转sql的一致性
数据库·sql
Java爱好狂.7 小时前
分布式ID|从源码角度深度解析美团Leaf双Buffer优化方案
java·数据库·分布式·分布式id·es·java面试·java程序员
Elastic 中国社区官方博客7 小时前
通过混合搜索重排序提升多语言嵌入模型的相关性
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
倔强的石头1068 小时前
KingbaseES:从兼容到超越,详解超越MySQL的权限隔离与安全增强
数据库·mysql·安全·金仓数据库
小鸡毛程序员8 小时前
我在CSDN学MYSQL之----数据库基本概念和基本知识(下)
数据库·mysql