//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
}
값들이 출력됨을 볼 수 있다.