2013-07-18 57 views
0

我有一个基于散列的分片在mongodb集合中为一个键“userId”启用。是否有可能获得散列值为“userId”的所有文档,比如说,“abcd”和“cdef”?是否有可能在mongodb中查询哈希索引键的散列范围?

谢谢!我发现

+0

什么,你的意思是将内部散列值返回结果? – Sammaye

+0

不一定(但会很好奇知道如何做到这一点)。我感兴趣的是以下内容:假设我有一系列MD5哈希表:A到B.我想要获取集合中的所有文档,其分片密钥的哈希值属于此范围 – Vyacheslav

+0

,即如果文档A是散列哈希1,B到2,C到4,我有一个范围[0,3],我想获得文档A和B – Vyacheslav

回答

0

一种方法是使用下面的查询:

db.mycollection.find({ 
"$and": [ 
    {_id: {"$gt": -5012941854059245285}}, 
    {_id : {"$lt": -4712634714892678072}} 
]}).hint({_id: "hashed"}) 

其中长数字散列_id的值。 它适用于我,但它是这样做的最佳方式?我可以肯定它会与即将发布的mongodb版本一起工作吗?

+0

你不需要$和,你可能不需要提示那里但是看起来不错,你可以做'db.mycollection.find({_ id:{$ gt:(),$ lt :()}})' – Sammaye

+0

谢谢。你说得对,我不需要“$和”。但没有“$提示”我没有结果。我怀疑_id上的默认索引踢了。实际上,explain()证实了这个假设。我想知道是否使用hint()不是一个“hacky”解决方案,并且将是可移植的,并为即将发布的版本工作 – Vyacheslav

+0

啊是的默认索引可能会接管,奇怪的是我不知道是否应该有一个JIRA。提示将始终得到支持,但当你必须回来修改这些查询时,它会让你的生活变得更加困难,如果可以处理,那么很好 – Sammaye