タイトルに記載されている通りに問題があります。
たとえば、私が試してみると:
val key = "myKey"
val value = "myVal"
val one = Option(collection.findOne(MongoDBObject(key -> value)))
val all = collection.find(MongoDBObject(key -> value))
次に、内容を確認して:
println(one) => None
println(all.size) => 0
ただし、MongoDBObjectパラメーターを使用しない場合は機能します。つまり、そこにあるすべてのものが検出されます。
私は何が間違っているのですか?パラメータオブジェクトは、検索でそれらのペアkey-value
を含む結果のみを返すようにする条件を指定していると思います...key-value
そして、私はキーと値が有効であると言わなければなりません。ただし、値は数値ですが、これらのステートメントでは文字列化されているため、問題はありません。か否か?
アップデート:
問題をより正確に説明するために必要なデータを取得しようとしながら、問題の原因を理解するのに十分なテストを実行しました。Casbahは「1」を残さずString
に自動的ににキャストするInteger
ため、文字列を整数と比較しても、確実に。を返すことはありませんtrue
。さて、私はこのような問題を解決することを考えることができます:
def getObjectBy(key: String, value: String) = {
val all = collection.find()
val buffer = Buffer[DBObject]()
while(all.hasNext) { buffer += all.next }
val haveTheKey = buffer.filter(_.keySet.contains(key))
if(haveTheKey.size > 0) {
val one = haveTheKey(0)
val v = one.get(key)
// 1st way (hell)
v match {
case i: Int => if(i == value.toInt) Some(one)
case s: String => if(s == value) Some(one)
case f: Float => if(s == value.toFloat) Some(one)
//... and so on..
case _ => None
}
// 2nd way (better?)
if(v.toString == value) Some(one) else None
} else None
}
しかし、それはばかげています...私はここで何かを取得していないと思います、教えてください、私は何が欠けていますか?