2011-04-10 56 views
3

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

我使用的Java API,所以这是我迄今为止

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

这工作正常任何常规领域。但似乎不适用于ObjectId字段。我认为是因为我无法比较一个ObjectId字符串?我不能完全将部分id或正则表达式放入新的ObjectId中。它只会抛出一个错误。

对此有什么想法?我试图给用户一种输入id的一部分的方法,并且能够找回具有该模式的所有文档。

在此先感谢!

+2

用正则表达式搜索objectid确实没有任何意义。 – 2011-04-10 16:33:25

回答

4

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

+0

好吧,你总是可以将objectid存储为字符串并进行查询。这种方法的实际应用不容置疑。 – 2011-04-10 17:04:12

+0

是啊,我在想同样的事情...更糟的情况下,我不得不存储一个新的领域,作为一个字符串objectid ... – Khon 2011-04-10 17:41:41

+2

洛基是正确的;我们将ObjectId作为MongoDB中的一种特殊类型存储。具体来说,ObjectId的本地表示比字符串版本更紧凑地存储。 请记住,您不必为_id的值使用ObjectId:它可以是包括Document的任何有效类型。如果你需要做RE匹配,你应该考虑diff类型;但记住RE匹配不会打索引,除非'^'锚定。 – 2011-04-10 18:45:49