当前位置: 首页 > article >正文

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")]
})


http://www.kler.cn/a/154121.html

相关文章:

  • 有限状态机(续)
  • arkUI:网格布局(Grid)
  • MySQL45讲 第二十四讲 MySQL是怎么保证主备一致的?——阅读总结
  • 2411rust,76~79
  • 使用IDE实现java端远程调试功能
  • 在arm64架构下, Ubuntu 18.04.5 LTS 用命令安装和卸载qt4、qt5
  • JOSEF 快速中间继电器 KZJ-4H-L DC220V 导轨安装
  • Jetson Nano部署YOLOv5与Tensorrtx加速
  • 【LittleXi】2023年广东工业大学腾讯杯新生程序设计竞赛
  • JavaWeb | JavaScript基础
  • 视频监控平台EasyCVR多场景应用,AI视频分析技术助力行业升级转型
  • 国内某知名半导体公司:实现虚拟化环境下的文件跨网安全交换
  • 解锁 ElasticJob 云原生实践的难题
  • AWS中使用ECS时ecsTaskExecutionRole缺失
  • Linux:锁定部分重要文件,防止误操作
  • 信奥编程 1168:大整数加法
  • 聊聊测试for Jeffky
  • 经典文献阅读之--Traversability Analysis for Autonomous Driving...(Lidar复杂环境中的可通行分析)
  • 主机安全-WindowsLinux的SSH安全加固
  • 【安装指南】MySQL和Navicat下载、安装及使用详细教程
  • 机器人算法——costmap膨胀层InflationLayer
  • 算法竞赛中的输入输出框架
  • Java研学-IO流(三)
  • 熬夜会秃头——beta冲刺Day2
  • 分享83个节日PPT,总有一款适合您
  • System.out.println隐藏字符串