从mongo shard chunk中获取所有文档

时间:2016-08-03 11:47:40

标签: mongodb mongodb-query mongo-shell

我有一个超过65k块的3-shard集合。我如何从此集合中获取驻留在特定块中的文档,并记住我的分片键是一个散列索引? 例如,我的一个块(来自foreach ($users as $user) { $data = ['user' => $user]; $this->mailer->queue($views, $data, function($message) use($user) { $message->to($user->email, $user->name); }); } 集合的文档)看起来像这样:

chunks

如何按{ "_id" : "foo.bar-x_1947951600265057904", "lastmod" : Timestamp(1, 0), "lastmodEpoch" : ObjectId("57910236c0b70d5ea7025479"), "ns" : "foo.bar", "min" : { "x" : NumberLong("123") <-- this is a hashed value of a string field `x` }, "max" : { "x" : NumberLong("987") <-- this is a hashed value of a string field `x` }, "shard" : "shard0000" } foo.bar查询min/max这是一个常规字符串?我试过了:

x

但它会返回db.bar.find({x:{$gte: NumberLong('123'), $lte: NumberLong('987')}}).count()

1 个答案:

答案 0 :(得分:0)

您需要正确访问子文档,即键入min.xmax.x。此外,您必须使用$and绑定条件,因为它们现在是单独的条件。我输入了以下查询并且有效:

db.bar.find({
    $and:[
        'min.x': {
            $gte: NumberLong('123')
        }, 
        'max.x': {
            $lte: NumberLong('987')
        }
    ]
}).count()

您的初始查询返回0,因为没有与x匹配的文档条目。

请注意,我使用任何分片集合。我只是创建了一个新的集合并插入了你给出的例子。 我希望这有帮助!