mongodb에서 subDocument에 대한 find 쿼리는 어떻게 하나요?
조회수 1853회
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);
}
);
보통의 경우는 단일 값을 비교해주면 되지만 받은 데이터가 배열의 형태라 머리가 아픕니다. 아무리 검색해봐도 비슷한 케이스를 찾을 수 없어 여기에 질문 남깁니다..
어떻게 하면 될까요?
-
(•́ ✖ •̀)
알 수 없는 사용자
댓글 입력