如何查询数组[String]的正则表达式匹配?

时间:2012-01-13 15:27:44

标签: scala mongodb casbah salat

我尝试通过Casbah查询MongoDB,找到一个带有正则表达式字符串数组的字段。

例如:

我有一个带有ips列表的Maschine,它在字段ips中以字符串形式存储。 现在我想搜索所有具有子网192.168的计算机。

对我来说,我看起来我无法查询应用于每个条目的regexp的数组,如果其中一个条目匹配,则返回该机器。

任何方式进行此类查询?

- 修正了

感谢您的帮助。

现在一切正常。最后我需要解决Casbah的一个限制,因为我需要加入查询$或者Casbah抱怨错误地使用regexp。

我的RegExp Array查询的最终代码是另一个字段:

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)

这不是最好的代码,需要修复参数的字符串连接。但它有效:)

2 个答案:

答案 0 :(得分: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的行为总是如下:如果您将数组视为普通字段,它会将操作应用于每个成员,如果匹配,则认为父文档匹配。

答案 1 :(得分:0)

查看$elemMatch query operator是否适合您。