【问题标题】:how to do a regex query on mongodb ObjectId field如何对 mongodb ObjectId 字段进行正则表达式查询
【发布时间】:2011-04-10 16:03:05
【问题描述】:

这有点棘手..如何对 ObjectId 字段进行正则表达式查询?

我正在使用 java api,所以这是我目前所拥有的

BasicDBObject q = new BasicDBObject()
q.put(field, Pattern.compile(value, Pattern.CASE_INSENSITIVE));

这适用于任何常规字段。但似乎不适用于 ObjectId 字段。我假设是因为我无法将 ObjectId 与字符串进行比较?而且我不能只是将部分 id 或正则表达式放入新的 ObjectId 中。它只会抛出一个错误。

对此有什么想法吗?我正在尝试为用户提供一种输入部分 id 的方法,并能够取回具有该模式的所有文档。

提前致谢!

【问题讨论】:

  • 用正则表达式搜索objectid真的没有任何意义。

标签: java regex mongodb


【解决方案1】:

据我所知,ObjectId 是 MongoDB 中的一种自己的类型,其行为不像字符串。尽管 MongoDB 中还有其他类型不同于字符串,例如数组等,它们可以通过正则表达式模式进行搜索,但这对于 ObjectId 来说似乎是不可能的。要实现像你这样的 id 搜索,我可能会定义一个自己的索引 id 字段,其中包含一个简单字符串的 id 和冷肩 ObjectId。

【讨论】:

  • 好吧,您可以随时将 objectid 存储为字符串并进行查询。这种方法的实际应用值得怀疑。
  • 是的,我也在想同样的事情...更糟糕的情况是,我必须存储一个将 objectid 作为字符串的新字段...
  • 洛基是正确的;我们将 ObjectId 作为一种特殊类型存储在 MongoDB 中。具体来说,ObjectId 的本机表示比字符串版本存储得更紧凑。请记住,您不必为 _id 的值使用 ObjectId:它可以是任何有效类型,包括 Document。如果你需要做 RE 匹配,你应该考虑一个 diff 类型;但请记住,除非 '^' 锚定,否则 RE 匹配不会命中索引。
猜你喜欢
  • 2013-10-23
  • 1970-01-01
  • 2014-01-26
  • 2013-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多