2012-01-13 1 views
8

정규식이있는 문자열 배열 인 필드에 대해 Casbah를 통해 MongoDB를 쿼리하려고합니다. 예를 들어정규 표현식 일치에 대해 [String]을 (를) 쿼리하는 방법은 무엇입니까?

는 :

나는 필드 IPS의 문자열로 저장되어있는 IP 목록,와 MASCHINE 있습니다. 이제 서브넷 192.168이있는 모든 시스템을 검색하려고합니다.

나에게는 내가 모든 항목에 적용된 정규 표현식을 사용하여 배열을 쿼리 할 수없는 것처럼 보이며 항목 중 하나가 일치하면 컴퓨터가 반환됩니다.

그런 쿼리를 만드는 방법은 없습니까?

- 고정

당신의 도움에 감사드립니다.

모든 것이 이제 작동합니다. 결국 나는 Casbah의 한 가지 한계를 해결해야한다. 왜냐하면 $ 또는 and로 쿼리에 참여해야했기 때문에 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