반응형
모델 스키마에 virtual 필드를 생성
const MenuCategorySchema: Schema<IMenuCategory> = new Schema<IMenuCategory>(
{
// MySql 메뉴 카테고리 IDX
idx: { type: Number, required: true, unique: true },
// MySql 매장 IDX
restaurantIdx: { type: Number },
// 카테고리 명
name: { type: String, required: true },
// 노출 우선순위
priority: { type: Number, required: true },
// 삭제 여부
isDeleted: { type: Boolean, required: true, default: false },
// 카테고리 설명
description: { type: String, default: '' },
// Document 생성 일시
createdAt: { type: Schema.Types.Date },
// Document 수정 일시
updatedAt: { type: Schema.Types.Date },
},
{
timestamps: true,
skipVersioning: true,
versionKey: false,
read: 'primary',
},
);
MenuCategorySchema.virtual('menu', {
ref: 'menu',
localField: 'idx',
foreignField: 'menuCategoryIdx',
});
MenuCategorySchema.set('toObject', { virtuals: true });
MenuCategorySchema.set('toJSON', { virtuals: true });
ref : 참고할 collection
localField : 현재 스키마 (collection)에서 연결할 필드
foreignField : 참고할 collection 중 localField와 연결할 필드
menuCategory의 Idx 필드 값은 menu collection의 필드 menuCategoryIdx와 값이 같다.
** 이래에 두 줄 toObject, toJSON 반드시 해줘야함. virtual 모델은 output값이 따로 없대!
mongoose
const getSortedCategoryListAndMenusByRestaurantIdx = async (
restaurantIdx: number,
): Promise<IMenuCategory[]> => {
return MenuCategoryModel.find(
{
restaurantIdx,
isDeleted: false,
},
['idx', 'name', 'priority'],
)
.sort([['priority', 'ASC']])
.populate({
path: 'menu',
select: 'name dailySalesQuantity isSoldOut priority',
match: {
isDeleted: false,
status: true,
$or: [
{ useReservationOrder: true },
{ useWaitingOrder: true },
{ useTakeOutOrder: true },
{ useOnSiteOrder: true },
],
},
options: {
sort: { priority: 1 },
},
})
.exec();
};
반응형
'mongoDB' 카테고리의 다른 글
[mongoDB] create index $text search 걸어서 특정 단어 검색하기 (0) | 2022.04.29 |
---|---|
[mongoimport ] txt cvs파일 mongoDB 대량 insert하기 / type 타입 지정 (0) | 2022.04.22 |
[mongoDB] Operations (0) | 2021.11.26 |
[MongoDB] Replica set이란? (0) | 2021.11.19 |
[MongoDB] Mongoose Query 총 정리 (0) | 2021.11.15 |