2011년 10월 17일
[DB] MongoDB Java Driver 버그 아닌 버그
C 표현식
(
(a < 0 || a > 100) &&
(b < 0 || b > 100) &&
(c == 0)
)
MongoDB 표현식
{
{ $or: [ { a: { $lt: 0 } }, { a: { $gt: 100 } } ] },
{ $or: [ { b: { $lt: 0 } }, { b: { $gt: 100 } } ] },
{ c: 0 },
}
BasicDBObject query = new BasicDBObject();
query.append("$or", mongo_array(new BasicDBObject("a", new BasicDBObject("$lt", 0)), new BasicDBObject("a", new BasicDBObject("$gt", 100))));
query.append("$or", mongo_array(new BasicDBObject("b", new BasicDBObject("$lt", 0)), new BasicDBObject("b", new BasicDBObject("$gt", 100))));
query.append("c", 0);
Java Driver로 구현시 위 코드와 같이
앞쪽에 있는 것을 key로하는 해시맵에 조건식을 넣게 되는데 (순서대로 "$or", "$or", "c")
문제는 같은 "$or" key가 발생하여 뒤쪽 "$or"식이 앞쪽 "$or"식을 덮어쓰게 된다- LOL
이런 경우 문제가 발생해도 실제로 쿼리식을 뽑아보지않고는 원인을 찾기가 까다롭게 된다
모든 식들을 $and로 묶어서 넣거나 값의 범위가 적다면 $in 문법 등으로 피해가자
# by | 2011/10/17 22:08 | 트랙백 | 덧글(0)










