MongoDB serverStatus指定返回字段时mem字段无法生效问题排查
MongoDB 8.3+ serverStatus 中 mem 字段无法通过 none:1 筛选返回的问题分析
这不是Bug,是你对serverStatus命令的参数逻辑理解有误。
- MongoDB 8.3+引入的
none:1参数,作用是先禁用所有可选的统计字段组,再通过显式指定字段组来启用你需要的内容。 connections和opcounters是独立的顶级统计字段组,所以直接指定connections:1和opcounters:1就能正常返回。- 但
mem字段并不属于独立的统计字段组,它是storage统计组下的子内容。当你使用none:1后,storage组被默认禁用,仅指定mem:1无法启用该字段,必须显式启用storage组。
修正后的命令应该是:
status = client.admin.command( {"serverStatus":1, "none": 1, "storage": 1, "connections": 1, "opcounters": 1} )
执行这个命令后,返回结果中就会包含mem字段(它属于storage组的输出内容)。
如果你只需要mem里的特定子字段,还可以进一步筛选,比如只保留mem.resident和mem.virtual:
status = client.admin.command( {"serverStatus":1, "none": 1, "storage": {"mem": {"resident": 1, "virtual": 1}}, "connections": 1, "opcounters": 1} )
内容的提问来源于stack exchange,提问作者Atomic Tom
相关产品推荐
相关产品推荐

