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



웹로직에서 파폭이나 크롬에서 세션에 저장한값이 사라져서


로그인이 되지 않거나, 값을 읽어올 수 없는 희한한 문제를 겪었다.


익스플로러에서는 제대로 로그인이되거나, 세션값이 잘 읽힙니다.


정확하진 않지만, 이 문제는 웹로직에서 세션 키값을 같은것을 쓰고있을 때, 발생하는 문제 같습니다.


톰캣으로 돌렸을 경우는 발생하지 않는 문제입니다.


session.setAttribute("userInfo", object);


userInfo 로 저장했을 경우에 저 이름이 문제가 된다면


weblogic.xml 에 아래와 같이 추가해줍니다.



weblogic.xml

<session-descriptor>

        <cookie-name>userInfo</cookie-name>

    </session-descriptor>


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




리눅스 심볼릭 링크처럼  웹로직에서 가상 디렉토리를 설정해야 할 때 


weblogic - virtual directory mapping 을 이용하여 


weblogic.xml 에 설정하는 방법 입니다.



가상 디렉토리를 설정하고자 하는 url 


http://xxx.xxx.xxx.xxx:7001/Margo/files/bori/cat.jpg

http://xxx.xxx.xxx.xxx:7001/Bori/files/margo/cat.jpg


2개 어플리케이션 context : Margo, Bori 


두개의 어플리케이션에서 공통으로 참조하고, 파일생성 및 삭제를 해야하는 경우 


참조대상 로컬 패스 - c:/webapps/files


프로젝트 Margo 의 weblogic.xml - 어플리케이션마다 WEB-INF 폴더 아래에 위치


<?xml version='1.0' encoding='UTF-8'?>

<weblogic-web-app xmlns="http://xmlns.oracle.com/weblogic/weblogic-web-app" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.oracle.com/weblogic/weblogic-web-app http://xmlns.oracle.com/weblogic/weblogic-web-app/1.3/weblogic-web-app.xsd">


<virtual-directory-mapping>

<local-path>C:\webapps</local-path>

<url-pattern>/files/*</url-pattern>

</virtual-directory-mapping>


<context-root>/Margo</context-root>

</weblogic-web-app>




프로젝트 Bori 의 weblogic.xml - 어플리케이션마다 WEB-INF 폴더 아래에 위치


<?xml version='1.0' encoding='UTF-8'?>

<weblogic-web-app xmlns="http://xmlns.oracle.com/weblogic/weblogic-web-app" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.oracle.com/weblogic/weblogic-web-app http://xmlns.oracle.com/weblogic/weblogic-web-app/1.3/weblogic-web-app.xsd">


<virtual-directory-mapping>

<local-path>C:\webapps</local-path>

<url-pattern>/files/*</url-pattern>

</virtual-directory-mapping>


<context-root>/Bori</context-root>

</weblogic-web-app>





이렇게 하면 http://xxx.xxx.xxx.xxx:7001/Margo/files/bori/cat.jpg


라고 호출하게되면, c:/webapps/files/bori/cat.jpg 를 참조하게 됩니다.


리눅스 심볼릭 링크처럼 대체하는게 아니고 


지정해준 로컬패스에 이어서 붙게 됩니다.


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