mongodb 검색조건 트릭

json의 같은 level 내의 key 값 중복에 대한 성질과도 관계있는 검색조건 트릭에 대하여 정리해봅니다.

select * from users where age > 10
표현을 몽고 nosql 문장으로 표현한다면?
db.users.find({age:{$gt>10}});

select * from users where age > 10 and age < 20 표현을 몽고 nosql 문장으로 표현한다면? (복수 선택 가능) 1. db.users.find({ age : {$gt:10,$lt:20} }) 2. db.users.find({ $and : [ {age:{$gt:10}} , {age:{$lt:20}} ] }) 3. db.users.find({ age : { $gt : 10 }, age : { $lt : 20 } }) (아... 열라 복잡해.. 괄호지옥이다;;) 첫번째는 정답입니다. 그리고 제일 간단하고 직관적으로 보입니다. 괄호지옥이지만 그중에서 제일 심플하지요. 몽고디비에서 속도가 빠른 패턴이랍니다. 두번째는 정답입니다. 같은 패턴으로 $or 가 있습니다. 몽고 nosql 사용시 정석?문법입니다. 세번째는 오답입니다. 결과가 age < 20 인 모든 document를 리턴합니다.
좀더정확히 말하자면 “age가 20보다 작은, 모든 document를 포함한 커서” 를 리턴합니다.
json 이 같은 레벨에서 키값 중복을 허용하지 않습니다. 불행히도 중복 정의 한다고 해도 에러를 리턴 하지도 않습니다. 그래서 뒤에 값만 반영됩니다. 쉽게 확인해보시려면 브라우저나 node 아님 그냥 몽고 shell 에서 다음과 같이 해보세요

> var a = {age:10,age:20};
> a
{age:20}

이렇게 됩니다.

그래서 키값 한개에 범주 같은 중복조건을 주려면 1.번 패턴이 가장 빠르다고 합니다. 2.번 패턴은 가장 정석 패턴입니다.

  • Facebook
  • Google Plus
  • Twitter
  • LinkedIn
  • Pinterest
  • Tumblr
  • Instapaper
  • Delicious