2012-01-13 13 views
8

Regexp'li dizeler dizisi olan bir alan için MongoDB'yi Casbah ile sorgulamayı deniyorum. ÖrneğinBir regexp eşleşmesi için bir dizi [String] nasıl sorgulanır?

:

Ben alanlar ip'leri de dize olarak saklanır ip'leri listesi, bir Maschine var. Şimdi 192.168 alt ağına sahip tüm makineleri aramak istiyorum.

Benim için her girişe uygulanan bir regexp ile bir dizi sorgulayamıyorum ve girdilerden biri makine ile eşleştiğinde döndürülen gibi görünüyor.

Böyle bir sorgulama yapmanın herhangi bir yolu var mı?

- Sabit

Yardımlarınız için teşekkürler.

Her şey şimdi çalışıyor. Sonunda Casbah'ın bir kısıtlaması etrafında çalışmam gerekiyor, çünkü $ ile sorgulara katılmam gerekiyordu ve Casbah regexp'le ilgili eksikliklerden şikayet ediyor. Ek bir diğer alanı olan bir RegExp Dizisi sorgusu için

Benim son kodudur:

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) 

En güzel en kodu ve parametrenin dize birleştirme düzeltilmesi gerekiyor değildir. Ancak,

cevap

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 hep böyle davranır: Normal bir alanda gibi bir dizi davranırsanız, o takdirde her üyesine operasyonu uygular ve Bir eşleşir, ana belgeyi bir eşleşme olarak düşünün.

0

$elemMatch query operator'un sizin için çalışıp çalışmadığını öğrenin.

Bunun bir dizi olduğu gerçeğini göz ardı edebilirsiniz
+0

Zaten denedim. $ elemMatch, dizimin anahtar/değer çiftlerine sahip olmasını bekler. Ama sadece basit dizelerim var. – Odo

İlgili konular