2012-01-13 26 views
8

我尝试通过Casbah查询一个字符串数组的字段与正则表达式的MongoDB。如何查询正则表达式匹配的Array [String]?

例如:

我有一个Maschine用的IP地址列表,存储作为田野IPS字符串。 现在我想要搜索具有子网192.168的所有机器。

对我来说,我看起来像我不能查询一个正则表达式应用于每个条目的数组,如果其中一个条目匹配机器返回。

任何方式来作出这样的查询?

- 修正

感谢您的帮助。

现在一切正常。最后,我需要解决Casbah的一个局限性,因为我需要加入使用$或者Casbah进行的查询,并抱怨使用正则表达式丢失了implicits。

我的用于与其他附加字段一正则表达式阵列查询最终的代码是:

val regexp = ".*" + parameter + ".*" 
val nameQ = MongoDBObject("serverName" -> regexp.r) 
val ipsQ = MongoDBObject("ips" -> regexp.r) 
val bldr = MongoDBList.newBuilder 
bldr += ipsQ 
bldr += nameQ 
val query = MongoDBObject("$or" -> bldr.result.asDBObject) 
val result = find(query) 

它并不需要固定的最好的代码和参数的字符串连接。但它的作品:)

回答

12

可以忽略的事实,这是一个数组:

> db.rx.insert({ "ips" : ["192.168.1.231", "192.168.2.231", "120.32.42.51"] }); 
> db.rx.find({ ips : /192./ }) 
{ "_id" : ObjectId("4f104f0183bfca7a48b60da1"), 
    "ips" : [ "192.168.1.231", "192.168.2.231", "120.32.42.51" ] } 

MongoDB的行为始终是这样的:如果你把一个数组就像一个正常的领域,它将应用操作到每个成员,如果一个匹配,考虑父文档匹配。

0

看看$elemMatch query operator会为你工作。

+0

我已经试过了。 $ elemMatch期望我的数组具有键/值对。但我只有简单的字符串。 – Odo 2012-01-13 15:35:30