mongodb에서 subDocument에 대한 find 쿼리는 어떻게 하나요?

조회수 1852회
var subSchema = mongoose.Schema({
  main:Number,
  sub:Number,
  color:Number
},{ _id : false });

var testSchema = new Schema({
    userId:{
      type : String,
      index : true
    },
    itemTag: [subSchema]
}, { versionKey: false });

위와 같은 형식의 스키마를 가진 Document를 만들었는데요. 클라이언트에서

{ 
    "userId":"aaabbb",
    "itemTag":[{
        "main":3,
        "sub":7,
        "color":1
    },{
        "main":4,
        "sub":4,
        "color":1
    }]
}

이와 같은 형식으로 json 데이터를 보내면 서버에서 mongodb의 item 도큐먼트를 뒤져서 userId가 같고 itemTag가 받은 json데이터와 정확히 일치하는 데이터를 리턴하는 코드를 작성하려고 합니다.

제가 원하는 결과 값은

[{ 
    "userId":"aaabbb",
    "itemTag":[{
        "main":3,
        "sub":7,
        "color":1
    },{
        "main":4,
        "sub":4,
        "color":1
    },{
        "main":1,
        "sub":1,
        "color":1
    },{
        "main":2,
        "sub":2,
        "color":2
    }]
},{ 
    "userId":"aaabbb",
    "itemTag":[{
        "main":3,
        "sub":7,
        "color":1
    },{
        "main":4,
        "sub":4,
        "color":1
    },{
        "main":7,
        "sub":3,
        "color":2
    },{
        "main":5,
        "sub":5,
        "color":5
    }]
},{ 
    "userId":"aaabbb",
    "itemTag":[{
        "main":3,
        "sub":7,
        "color":1
    },{
        "main":4,
        "sub":4,
        "color":1
    },{
        "main":6,
        "sub":6,
        "color":4
    },{
        "main":5,
        "sub":5,
        "color":2
    }]
}
]

이런 식으로 받은 json 데이터를 포함하는 값입니다.

근데 문제는 $all이나 $elemMatch를 사용하라는데 비교하는 데이터가 document일경우는 어떤 식으로 작성해야할지 감이 오질 않습니다...

Item
      .find({ $and: [
                { userId: req.body.userId },
                { itemTag: { $all: req.body.itemTag} }
              ]})
      .sort(sortQuery)
      .exec(
        function (err, data) {
          if (err) res.json(err);
          res.json(data);
        }
      );

보통의 경우는 단일 값을 비교해주면 되지만 받은 데이터가 배열의 형태라 머리가 아픕니다. 아무리 검색해봐도 비슷한 케이스를 찾을 수 없어 여기에 질문 남깁니다..

어떻게 하면 될까요?

  • (•́ ✖ •̀)
    알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)