2012-01-13 33 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