제목에 설명 된 것과 똑같은 문제가 있습니다. 예를 들어카스바 - 파라 메트릭 찾기 또는 findOne은 거기에있는 것을 반환하지 않습니다.
, 내가하려고하면 :
val key = "myKey"
val value = "myVal"
val one = Option(collection.findOne(MongoDBObject(key -> value)))
val all = collection.find(MongoDBObject(key -> value))
후 나는 내용 및 확인 : 나는 MongoDBObject 매개 변수를 사용하지 않는 경우, 작동하지만
println(one) => None
println(all.size) => 0
를 - 그것은 모든 발견 거기있는 것들.
내가 뭘 잘못하고 있니? 나는 그 매개 변수 객체가 key-value
기준을 지정한다고 가정합니다. 검색 결과가 key-value
쌍을 포함하는 결과 만 반환하도록해야한다고 가정합니다.
그리고 그 키와 값이 유효하다고 말해야합니다. 그러나 값은 숫자이지만이 문에 대해 문자열로 표시되므로 아무런 문제가 없어야합니다. 안 그래요?
UPDATE : 문제의 원인을 실현하기 위해
문제의 더 precised 설명에 필요한 데이터를 캡처하는 중에, 내가 실행 한 테스트에 충분. Casbah가 String
으로 유지되도록 "1"을 남기지 않고, 자동으로 Integer
으로 캐스팅하므로 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
}
을하지만 rediculous이다 : 좋아, 그래서 나는이 같은 문제를 해결 생각할 수 있는가?
구문이 멋지게 보입니다. 쉘에서 실제 데이터를 쿼리 코드로 게시 할 수 있습니까? 당신이 문자열로 말할 때, 그 값이 mongodb의 문자열이라는 것을 의미합니까? –
구문에 동의하면 키/값이 문제일까요? –
업데이트를 참조하십시오 .. – noncom