面试题答案
一键面试-
显示特定数据库下所有集合的详细信息:
- 首先使用
use <database_name>
切换到特定数据库,例如use myDatabase
。 - 然后可以使用以下命令获取集合详细信息:
db.getCollectionInfos().forEach(function(collInfo) { var coll = db.getCollection(collInfo.name); var stats = coll.stats(); printjson({ collection: collInfo.name, size: stats.size, documentCount: stats.count }); });
- 上述代码通过
db.getCollectionInfos()
获取当前数据库所有集合的信息,然后遍历每个集合,使用coll.stats()
获取集合的统计信息,包括集合大小(size
,单位为字节)和文档数量(count
)。
- 首先使用
-
排查和解决权限问题:
- 确认用户权限:
- 检查用户是否有查看集合信息的权限。在MongoDB中,可以使用
db.auth(<username>, <password>)
命令进行认证,然后通过db.runCommand({usersInfo: "<username>"})
查看用户权限。确保用户有针对该数据库的read
或readWrite
权限等相关权限。
- 检查用户是否有查看集合信息的权限。在MongoDB中,可以使用
- 角色配置:
- 确认用户是否被正确分配了合适的角色。例如,
read
角色允许读取数据,readWrite
角色允许读写数据等。可以通过修改用户角色配置,将合适的角色赋予用户,例如db.grantRolesToUser("<username>", [{role: "readWrite", db: "<database_name>"}])
。
- 确认用户是否被正确分配了合适的角色。例如,
- 集群配置:
- 如果是在集群环境下,检查集群的配置是否正确。比如
configsvr
和mongos
的配置,确保权限相关的配置没有问题,如配置文件中的keyFile
等认证相关配置是否正确。
- 如果是在集群环境下,检查集群的配置是否正确。比如
- 版本兼容性:
- 检查MongoDB版本与权限配置的兼容性。不同版本的MongoDB在权限管理方面可能存在差异,确保当前版本的权限配置方式是正确的。
- 确认用户权限: