質問

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 クエリオペレーター あなたのために働きます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top