mongdDB 관계형 데이터베이스 (2 - 2) Mongoose의 Populate 명령어

개발자가 되고 싶어요·2023년 2월 28일
0
post-thumbnail
//node farm.js

mongoose Connected
{
  _id: new ObjectId("63fc409ddf8670525181bf58"),
  name: 'pajo pear farm',
  city: 'chungnam nonsan',
  products: [
    new ObjectId("63fc3395b0f51d6ffe359b67"),
    new ObjectId("63fc3395b0f51d6ffe359b68")
  ],
  __v: 1
}

객체id가 아닌 데이터의 정보들로 채워고 싶을 때가 있다. 매번 필요한 작업은 아니지만 페이지마다 원하는 정보들넣을 때가 필요한데 이 작업을 위해 mongoose의 ref가 필요하다.

그리고 이전에 ref:products를 설정했으므로 이를 사용할 수 있다.

ref를 통해 mongoose에게 type: Schema.Types.ObjectId가 객체 ID의 배열임을 알려주고 각각 이 product 모델을 나타내거나 연결되어있다고 알려준다.

그럼 populate(채워넣기)라는 메소드를 호출할 수 있게된다.

mongoose가 해당 배열에 저장된 id를 가져다 작업하고 무엇으로 채울건지 populate의 대상을 명시해야 한다.

예시에서는 상품 ID였고 이것을 해당하는 상품과 대체 시켜준다.

 

Farm.findOne({name:'pajo pear farm'})
    .populate('products')
    .then(farm => console.log(farm))

pajo pear farm을 찾고 products 로 채워넣기 설정, products에는 product 모델의 상품의 id를 갖고 있음. ref Product로 해당 id에 대한 상품 모델의 값들을 mongoose에게 채워넣게 시킴 console.log 해주면

mongoose Connected
{
  _id: new ObjectId("63fc409ddf8670525181bf58"),
  name: 'pajo pear farm',
  city: 'chungnam nonsan',
  products: [
    {
      _id: new ObjectId("63fc3395b0f51d6ffe359b67"),
      name: 'Goddess melon',
      price: 4.54,
      season: 'Summer',
      __v: 0
    },
    {
      _id: new ObjectId("63fc3395b0f51d6ffe359b68"),
      name: 'Goddess Watermelon',
      price: 10.54,
      season: 'Summer',
      __v: 0
    }
  ],
  __v: 1
}

값들이 출력됨을 볼 수 있다.

profile
I want to be a Backend Developer

0개의 댓글