BLOG ARTICLE ne | 1 ARTICLE FOUND

  1. 2012.09.09 [MongoDB] Query - 쿼리 질의 시에 연산자 조합 사용법


MongoDB 쿼리 연산자 모음




1. <, <=, >, >= 연산자

Mongo DB에서 <, <=, >, >= 를 사용할 때,


<  는  "$lt"

<=  는  "$lte"


>  는  "$gt"

>=  는  "$gte"


로 표현할 수 있다.


예제


SELECT * FROM users WHERE age >= 20;

==> db.users.find({ age : { "$gte" : 20 } });


SELECT * FROM users WHERE age < 20;

==> db.users.find({ age : { "$lt" : 20 } });


 AND 연산

SELECT * FROM users WHERE age BETWEEN 20 AND 25;

==> db.users.find({ age : { "$gte" : 20 , "$lte" : 25} });



age:{"gte":20}, age:{"$lte":25} 로 질의하면 같은 도큐먼트 내의 같은 수준에서는 반복으로 

질의 할 수 없습니다. 따라서 틀렸습니다.





2. $in, $nin, $all 연산자

SELECT * FROM users WHERE age IN(3,5,7,9);

==> db.users.find({ age : { $in : [3, 5, 7, 9] });


SELECT * FROM users WHERE age NOT IN(3,5,7,9);

==> db.users.find({ age : { $nin : [3, 5, 7, 9] }); // 문자열["ab", "안녕", "margo"]




모든 조건이 검색키와 일치되는 도큐먼트 찾기


도큐먼트 

{ name: "Bird Feeder",

   tags: [ "gift", "birds", "garden" ]

}

==> db.products.find({ tags : { $all : ["gift", "garden"] }  });






3. $ne, $not, $or, $and, $exists
 연산자

$ne - 같지않음(not equal to)  ** 단일한 값이거나, 배열인 경우 모두 수행된다

name 이 "ace" 인 도큐먼트중 tags가 "test" 가 아닌 모든 도큐먼트

==> db.products.find({ 'name':'ace', tags: {$ne : "test"} })



$not - 다른 연산자나 정규 표현식으로 부터 얻은 결과의 여집합을 리턴

성이 B로 시작하지 않는 모든 유저의 도큐먼트

==> db.users.find({ last_name: { $not: /^B/ } })



$or - 서로 다른 키에 대한 검색을 할 때 사용한다. 만약 같은 키에 대해 찾는다면  $in을 써야한다.

color 가 blue 이거나, name 이 ace인 도큐먼트를 검색할 때

==> db.products.find({ $or : [

{ 'details.color': 'blue'}

, { 'details.name': 'ace'}

})



$and 

- {age:3, name:'margo'} 는 age :3 AND name:'margo' 로 해석된다.

  이런 방법으로 AND 를 표현할 수 없을때 $and를 사용한다.

예제 도큐먼트

{ tags: ['gift', 'holiday', 'gardening', 'landscaping'] }


gift 나 holiday중 하나가 포함되고, gardening 나 landscaping 중 하나가 포함된 도큐먼트를

찾고싶을때, 이 쿼리를 표현하는 유일한 방법은 2개의 $in 쿼리를 $and 로 연결하는 것이다.


db.products.find({ $and : [

{tags : { $in : ['gift', 'holiday']}}

, {tags : { $in : ['gardening', 'landscaping']}}

]

}) 




$exists - 특정 키, 즉 도큐먼트가 해당 속성을 가지고 있는지 질의하는 쿼리다.

도큐먼트내에 특성 속성이 존재할수도 있고, 존재하지 않을수도 있다.

상품에 대한 컬렉션의 경우, 어떤 상품만의 특별한 키를 가질수 있을텐데, 

그때 해당도큐먼트가 그 키를 가지고 있는지 확인하고싶을때 사용한다.


속성을 가지고 있지 않은 도큐먼트를 찾을때 - false

==> db.products.find({ 'datails.color' : { $exists : false}})


속성을 가진 도큐먼트 - true

==> db.products.find({ 'datails.color' : { $exists : true}})


$exists : false 는 아래와 같이 표현가능하다.

==> db.products.find({ 'details.color' : null })


$exists : true 는 아래와 같이 표현가능하다.

==> db.products.find({ 'details.color' : {$ne: null }  })



YOUR COMMENT IS THE CRITICAL SUCCESS FACTOR FOR THE QUALITY OF BLOG POST