以下是我数据库中文档的简化版本:
{
_id : 1,
main_data : 100,
sub_docs: [
{
_id : a,
data : 100
},
{
_id: b,
data : 200
},
{
_id: c,
data: 150
}
]
}
所以想象一下,我有很多这些文件具有不同的数据值(比如0-1000)。 目前我的查询类似于:
db.myDb.find(
{ sub_docs.data : { $elemMatch: { $gte: 110, $lt: 160 } } }
)
我可以使用任何分片键来帮助查询吗?目前它正在查询所有分片。 如果没有,是否有更好的方法来构建我的查询?
答案 0 :(得分:1)
杰克逊,
你正在以正确的方式思考这个问题。 MongoDB中广播查询的问题在于它们无法扩展。
任何未在分片键上过滤的MongoDB查询都将广播到所有分片。此外,范围查询可能会导致广播,至少会导致您的查询被发送到多个分片。
所以这里有一些需要考虑的事情
归结为数据和查询的性质。您提供的示例文档是非常匿名的,因此很难知道您域中哪些好的分片候选对象。
如果您打算经常更新文档以向阵列添加更多条目,最后一条建议是小心插入/更新查询模式。 Growing documents present scaling problems for MongoDB. See this article on this topic.