본문 바로가기
[ Developer ]/MongoDB

[MongoDB] 몽고디비 배열 쿼리

by 김현섭. 2016. 6. 26.
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
MongoDB 배열 쿼리

@ 배열 쿼리
{
  "_id" : ObjectId("556e67ef35316c8fcfee226e"),
  “fruits” : [
  “banana”, “apple”, “peach”
  ]
}
위와 같은 배열이 있다고 할 때 아래와 같이 배열에 쿼리를 할 수 있다
  • fruits 값에 banana가 있는 것 찾아내기
    • db.c.find( { “fruits” : “banana” } )

  • fruits 값에 banana, peach 가 있는 것 찾아내기
    • db.c.find( { “fruits” : { “$all” : [“banana”, “peach”] } } )

  • $size
  • fruits 값이 3인 것 찾아내기
    • db.c.find( { “fruits” : { “$size” : 3 } } )

배열 쿼리 실습하기 위해서 데이터를 우선 넣는다
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
var post = {
          "subject" : "MongoDB Test",
          "description" : "Hello",
          "author" : "sslee",
          "tags" : [
                    "java", "mongoDB", "mongo", "Mongo", "bigData"
          ]
          , "replies" : [
                    {
                         "author" : "mcjang",
                         "description" : "^^"
                    },
                    {
                         "author" : "jhnam",
                         "description" : "--"
                    }
          ]
}
cs

Mongo Shell에 붙여 넣는다



@ 배열 쿼리 실습
  1. tags 안에 mongo가 있는 것
    • db.post.find( { "tags" : "mongo" } );
      • 실행 결과
  2. tags 안에 java와 mongo가 있는 것
    • db.post.find( { "tags" : [ "java", "mongo" ] } );
      • 실행 결과
    • 위와 같이 적어주면 결과가 나오지 않는데 그것은 java와 mongo 인 것을 찾기 때문이다
    • 앞에 "$all"을 적어주면 된다
    • db.post.find( { "tags" : { "$all" : [ "java", "mongo" ] } } );
      • 실행 결과
  3. jhnam이 쓴 게시글을 가져와라
    • 우리가 해온 방식이라면 아래와 같이 검색을 할 것이다
    • db.post.find( { "replies" : { "author" : "jhnam" } } );
      • 실행 결과
      • 결과가 나오지 않았다
    • 배열에서 문서 형태를 찾으려면 author만 적어주는게 아니라 description까지 찾아서 검색을 해야 한다
    • db.post.find( { "replies" : { "author" : "jhnam", "description" : "--" } } );
      • 실행 결과
    • 문서의 전체 내용을 모르는데 특정 내용을 알고 있을 때 검색을 하는 키워드가 있다 $elemMatch
    • db.post.find( { "replies" : { "$elemMatch" : { "author" : "jhnam" } } } );
      • 실행 결과