regexp一致の配列[string]を照会する方法は?
質問
Casbahを介してMongodbを照会しようとします。これは、Regexpのある文字列の配列であるフィールドです。
例えば:
私は、フィールドIPSに文字列として保存されているIPSのリストを備えたマスキンを持っています。次に、サブネット192.168のすべてのマシンを検索したいと思います。
私にとっては、すべてのエントリに適用されたRegexpを使用して配列をクエリすることはできないように見えます。
そのようなクエリを作成する方法はありますか?
- 修理済み
ご協力いただきありがとうございます。
すべてが機能します。最後に、カスバの1つの制限を回避する必要があります。なぜなら、私は$ orとのクエリに参加する必要があり、カスバは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
クエリオペレーター あなたのために働きます。
所属していません StackOverflow