mongodb - 获取 mongodb 中给定分片键值的分片 ID
问题描述
我在分片集群中有两个副本集,文档按userId
字段分片。
有没有办法查询哪个分片(副本集)包含给定文档(通过_id
或分片键字段)而不在客户端重新实现分片键散列
解决方案
您可以使用查询explain()
来识别文档的分片,方法是根据分片键进行查询。
获胜的计划应该有一个 SINGLE_SHARD 阶段,其相等查询类似于以下内容(为清楚起见,修剪了一些额外的输出):
> db.users.find({userId:123}).explain().queryPlanner.winningPlan
{
"stage" : "SINGLE_SHARD",
"shards" : [
{
"shardName" : "shard01",
"plannerVersion" : 1,
"namespace" : "test.users",
"indexFilterSet" : false,
"parsedQuery" : {
"userId" : {
"$eq" : 123
}
},
}
]
}
如果只需要分片名称,可以使用 JavaScript 表示法来引用完整路径:
> db.users.find({userId:123}).explain().queryPlanner.winningPlan.shards[0].shardName
shard01
推荐阅读
- c++ - Rcpp、RcppArmadillo:可以通过引用传递的类
- selenium - HEADCHR_PERMISSIONS 的 Python Selenium 不一致
- javascript - 如何获取选定年份中每个月的开始和结束时间戳
- python - 评估指标的手动计算与 Sklearn 函数不匹配
- typescript - 在单元测试中为 vue 组件提供 d3
- javascript - Vue b-form-tag 删除/隐藏添加按钮
- java - 如何使 Sublime 编译文件到特定目录?
- python - UnicodeEncodeError 与 Git Bash 但不是与 cmd.exe
- angular - APP_INITIALIZER - 如何访问所有类中的环境属性?
- reactjs - useEffect 多个依赖项