도란한
212
2021-05-06 09:37:51
3
150

mongoDB 쿼리 질문입니다


안녕하세요! 신입 개발자입니다.

다름이 아니라 NoSQL은 처음이라 많이 헷갈리네요..



{

        "_id" : ObjectId("608fbc85e8932378b415e6e1"),

        "email" : "test1@naver.com",

        "coloring" : [

                {

                        "_id" : ObjectId("608fbc85e8932378b415e6e0"),

                        "coloring_id" : "608fbc85e8932378b415e6df",

                        "regDate" : ISODate("2021-05-03T09:04:05.797Z"),

                        "contents" : 1,

                        "title" : "eeee",

                        "filepath" : 

                        "thumbnail" : null,

                        "version" : 1,

                        "coloring" : [ ]

                },

                {

                        "_id" : ObjectId("608fc09d187fd0797283aaaf"),

                        "coloring_id" : "608fc09d187fd0797283aaae",

                        "regDate" : ISODate("2021-05-03T09:21:33.583Z"),

                        "contents" : 1,

                        "title" : "qwer",

                        "filepath" : null,

                        "thumbnail" : null,

                        "version" : 1,

                        "coloring" : [ ]

                },

                {

                        "_id" : ObjectId("608fc214e339927abab64ecf"),

                        "coloring_id" : "608fc213e339927abab64ece",

                        "regDate" : ISODate("2021-05-03T09:27:48.299Z"),

                        "contents" : 1,

                        "title" : "업데이트2",

                        "filepath" : 

                        "thumbnail" : 

                        "version" : 2,

                        "coloring" : [ ],

                        "modDate" : ISODate("2021-05-04T02:39:18.094Z")

                },

                {

                        "_id" : ObjectId("6090b31035ecbe0137abe971"),

                        "coloring_id" : "6090b30f35ecbe0137abe970",

                        "regDate" : ISODate("2021-05-04T02:36:00.473Z"),

                        "contents" : 1,

                        "title" : "zzzz",

                        "filepath" : "

                        "thumbnail" : "

                        "version" : 1,

                        "coloring" : [ ]

                },

                {

                        "_id" : ObjectId("6090d9a435ecbe0137abe974"),

                        "coloring_id" : "6090d9a335ecbe0137abe973",

                        "regDate" : ISODate("2021-05-04T05:20:36.800Z"),

                        "contents" : 2,

                        "title" : "zzzz",

                        "filepath" : "

                        "thumbnail" : "

                        "version" : 1,

                        "coloring" : [ ]

                },

                {

                        "_id" : ObjectId("6090f37dbc2b4b0339e04133"),

                        "coloring_id" : "6090f37dbc2b4b0339e04132",

                        "regDate" : ISODate("2021-05-04T07:10:53.722Z"),

                        "contents" : 3,

                        "title" : "xsxs",

                        "filepath" : "

                        "thumbnail" : 

                        "version" : 1,

                        "coloringss" : [ ]

                }

        ],

        "__v" : 0

}

이러한 하나의 도큐먼트에서

coloring배열의 contents가 1인 배열만 조회하고싶은데

$elemMatch, $in 이런걸 써도 원하는 결과가 조회되지않네요 ㅠㅠ

자꾸 전체가 조회되거나, 배열 하나만 조회가 되더라구요..

쿼리를 어떻게 짜야 원하는 배열만 검색할 수 있을까요??

0
  • 답변 3

  • 1005hoon
    771
    2021-05-06 09:56:43

    _id에 상관없이 그냥 하나 데이터만 가져오고싶다면 aggregate 써보는건 어떤가요?


    collection.aggregate([
    {
    $unwind: "$coloring"
    },
    {
    $match: {
    "coloring.contents": 1
    }
    }
    ])
  • 도란한
    212
    2021-05-06 10:00:35

    hoonnote
    와 감사합니다!! 원하는 값만 나오네요
    혹시 여기서 email로 조건을 주고싶은데 그러면 앞쪽에다가 조건을 추가하면 될까요..?
    몽고디비 어렵네요 ㅠ

  • 1005hoon
    771
    2021-05-06 14:16:45

    움 이메일로 먼저 필터를 하고싶다면 

    요론식으로 하면 될거에요


    {
    $match: {
    email: '검색할 친구',
    },
    $unwind: '$coloring',
    $match: {
    'coloring.contents': 1
    }
    }
  • 로그인을 하시면 답변을 등록할 수 있습니다.