如何在数组[String]中查询regexp匹配



我尝试通过Casbah查询MongoDB,以查找一个字段,该字段是一个带有regexp的字符串数组。

例如:

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

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

有什么方法可以提出这样的疑问吗?

--固定

谢谢你的帮助。

现在一切正常。最后,我需要绕过Casbah的一个限制,因为我需要加入带有$or的查询,而Casbah抱怨缺少带有regexp的隐词。

我的RegExp数组查询的最后一个代码是:

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)

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

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

> 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的行为总是这样:如果你像对待普通字段一样对待一个数组,它会将操作应用于每个成员,如果其中一个匹配,则将父文档视为匹配。

查看$elemMatch查询运算符是否适用。

相关内容

  • 没有找到相关文章

最新更新