flutter

mongoose populate

햎피 2022. 7. 22. 21:58
반응형

지난 포스팅에서 subdocument를 만들었다.

user가 triplist를 가지고있고, triplist안에는 trip을 subdocument로 가지고 있다.

이때, trip 내용을 가져오고 싶을 때 사용하는 것이 populate 이다.

router.get("/trips/:userid", (req, res) => {
  userModel.find({ _id: req.params.userid }, (err, user) => {
    user[0].populate({
      path: 'triplist',
      populate: {
        path: 'trip'
      }
    }).then(trip => {
      res.json(trip);
    });
  });
})

코드 설명을 하자면, 서버에서 userid를 받았다.

그리고 userModel DB에서 userid를 검색한다.

그리고 userid가 있으면, 해당 user에서 triplist를 가져오고, triplist에서 trip을 가져온다.

그러면 리턴값은 아래와 같이 triplist안에 존재하는 모든 trip의 정보가 나온다.

{
    "_id": "62d91be9cebbf4c6f8be7211",
    "username": "m",
    "email": "m@m.com",
    "triplist": [
        {
            "trip": {
                "_id": "62da95533fd7c82eee196bff",
                "useridlist": [
                    "62b463733197d628f983b5ec",
                    "62d91be9cebbf4c6f8be7211"
                ],
                "title": "singapore",
                "tag": "#happy",
                "startdate": "2022-07-07",
                "enddate": "2022-07-15",
                "__v": 0
            },
            "allow": true,
            "color": "MaterialColor(primary value: Color(0xff2196f3))",
            "_id": "62da95533fd7c82eee196c03"
        },
        {
            "trip": {
                "_id": "62da9bbaa7349178c09faa04",
                "useridlist": [
                    "62b915a584aed684a7961e07",
                    "62d91be9cebbf4c6f8be7211"
                ],
                "title": "japan",
                "tag": "#japan",
                "startdate": "2022-07-27",
                "enddate": "2022-07-29",
                "__v": 0
            },
            "allow": true,
            "color": "Color(0xff21f398)",
            "_id": "62da9bbaa7349178c09faa08"
        }
    ],
    "createdAt": "2022-07-21T09:27:05.499Z",
    "updatedAt": "2022-07-22T12:44:42.337Z"
}
반응형