【问题标题】:Is it possible to query for a range of hashes of a hashed indexed key in mongodb?是否可以在 mongodb 中查询哈希索引键的哈希范围?
【发布时间】:2013-07-18 14:25:00
【问题描述】:

我为 mongodb 集合中的键“userId”启用了基于散列的分片。是否可以获得“userId”哈希值介于“abcd”和“cdef”之间的所有文档?

谢谢!

【问题讨论】:

  • 什么,你的意思是在结果中取回内部哈希值?
  • 不一定(但也很想知道如何去做)。我感兴趣的是以下内容:假设我有一个 MD5 哈希和范围:A 到 B。我想获取我的集合中的所有文档,其分片键的哈希值属于此范围
  • 也就是说,如果文档 A 被散列到散列 1,B 到 2,C 到 4 并且我有一个范围 [0,3],我想获取文档 A 和 B

标签: mongodb sharding mongodb-query querying


【解决方案1】:

我发现的一种方法是使用以下查询:

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

其中长数字是_id 的散列值。 它对我有用,但这是最好的方法吗?我可以确定它将与即将发布的 mongodb 版本一起使用吗?

【讨论】:

  • 你不需要 $and 并且你可能不需要那里的提示,但是看起来不错,你可以这样做 db.mycollection.find({_id:{$gt:(),$lt:()}})
  • 谢谢。你是对的,我不需要“$and”。但是没有“$hint”我没有得到任何结果。我怀疑 _id 上的默认索引开始起作用。实际上,explain() 证实了这个假设。我想知道使用hint() 是否不是一个“hacky”解决方案,并且可以移植并适用于即将发布的版本
  • 啊,是的,默认索引可能会接管,奇怪的是我想知道是否应该有一个 JIRA。提示将始终受到支持,但是当您必须返回并修改这些查询时,它会让您作为开发人员的生活更加困难,如果您能处理好,那就没问题了
  • 我实际上更喜欢没有提示()的解决方案,因为我担心查询优化器将来可能不会尊重这个提示......
  • 此解决方案使用不受支持的行为并与 MongoDB 2.6 中断。有关如何构建的指导,请参阅以下内容:jira.mongodb.org/browse/SERVER-14557
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-28
  • 2021-08-03
  • 1970-01-01
  • 2015-02-04
  • 2011-05-19
  • 2016-01-21
相关资源
最近更新 更多