如何使用PHP的mongodb/driver获取local.oplog.rs的count统计值
问题原因
你原有的代码逻辑错误:db.oplog.rs.stats()本质是MongoDB提供的集合统计命令,不属于普通的文档查询场景,因此不能用MongoDB\Driver\Query配合executeQuery实现,需要使用命令类执行collStats指令。
正确实现代码
// 初始化MongoDB连接,有鉴权需求请传入对应连接串 $mongo_connection = new MongoDB\Driver\Manager(); // 构造统计命令,对应shell中的db.oplog.rs.stats() $statsCommand = new MongoDB\Driver\Command([ 'collStats' => 'oplog.rs' ]); // 对local库执行统计命令,注意第一个参数为库名,不是集合全称 $resCursor = $mongo_connection->executeCommand('local', $statsCommand); // 从游标中提取统计结果 $statsResult = $resCursor->toArray()[0]; // 输出你需要的count值 var_dump($statsResult->count);
注意事项
- 执行命令的
executeCommand方法第一个参数为数据库名,要统计的集合名直接写在collStats的参数值中即可,不要传「库.集合」格式的字符串 - 命令执行返回的是游标对象,需要调用
toArray()方法转换为数组后取首个元素,就是完整的统计结果,除了count外,shell中stats返回的size、storageSize等字段都可以直接读取 - 如果MongoDB开启了身份验证,初始化
Manager时需要传入带账号密码的连接串,格式为mongodb://用户名:密码@主机地址:端口
内容的提问来源于stack exchange,提问作者Slabuke
相关产品推荐
相关产品推荐

