Mongodb 分片集群 $in VS $or

标签 mongodb sharding

如果我在分片键中有 MongoDB shurded 集群:“my_key”。 我必须在收藏包文档(大约 10-500 个项目)中找到具有不同 my_key 的。 敌人的例子:

db.test.find({my_key: {$in:[1,3,5,67,45,56...]}})

Mongos 知道带有“my_key”的 block 存储在哪里。 mongos 能否将我的查询拆分为小查询,精确到存储文档的分片?或者 mongos 会将此查询发送到所有分片吗?

关于 $or 的同样问题

db.test.find({$or:[{my_key: 1},{my_key: 3},{my_key: 5}...]})

最佳答案

我已经运行了测试。

如果 $in 仅包含来自一个分片的值,mongos 将发送 SINGLE_SHARD 查询。

如果 $in 包含来自多个分片的值,那么 mongos 将仅针对包含所需数据的分片(并非所有集群)发送 SHARD_MERGE 查询。

关于Mongodb 分片集群 $in VS $or,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32026504/

相关文章:

javascript - 使用 Meteor 返回 MongoDB 中具有单个字符串值的数组

node.js - Node Mongoose 更新两个集合

php - 我对 mysql 数据库的数据库设计模式正确吗?

sharding - 如何在 ArangoDB 中设置集群和分片?

redis - 如何搭建一个简化的redis集群(支持数据分片、负载均衡)?

MongoDB 3.4 分片错误。 "Cannot accept sharding commands if not started with --shardsvr"

node.js - Mongoose 模式如何添加数组

用于 Elasticsearch 的 mongodb river

mysql - 计划优化对一个非常大的 InnodDB 表的访问

swift - 在 Swift 中与 mongoDB 和 Parse 结合