Я очень новичок в пн goose. В настоящее время я создаю бэкэнд, используя Node.js, express. js, GraphQL и mon goose. У меня есть схема Drink и схема DrinkType. Я определил схему DrinkType как «алкоголь», «сок», «чай». И я добавил много напитков, и каждый напиток имеет ссылку на DrinkType. Затем я хотел бы сослаться на все напитки из DrinkType. Это схема для drinkType
const drinkTypeSchema = new Schema({
name: {
type: String,
required: true,
},
createdDrinks: [
{
type: Schema.Types.ObjectId,
ref: 'Drink',
},
],
Вот схема для напитка
const drinkSchema = new Schema({
name: {
type: String,
required: true,
},
drinkType: {
type: Schema.Types.ObjectId,
ref: 'DrinkType',
},
})
Это средство распознавания напитков. Всякий раз, когда создается новый напиток, я помещаю его в drinkType.
try {
const result = await drink.save()
createdDrink = transformDrink(result)
const drinkType = await DrinkType.findById(args.addDrinkInput.drinkTypeId)
if (!drinkType) {
throw new Error('DrinkType not found.')
}
drinkType.createdDrinks.push(drink)
await drinkType.save()
const drinkLoader = new DataLoader(drinkIds => {
return drinks(drinkIds)
})
const drinks = async drinkIds => {
try {
const drinks = await Drink.find({ _id: { $in: drinkIds } })
return drinks.map(drink => {
return transformDrink(drink)
})
} catch (err) {
throw err
}
}
const transformDrink = drink => {
return {
...drink._doc,
_id: drink.id,
drinkType: drinkType.bind(this, drink.drinkType),
}
}
const drinkType = async drinkTypeId => {
try {
const drinkType = await drinkTypeLoader.load(drinkTypeId.toString())
return {
...drinkType._doc,
_id: drinkType.id,
createdDrinks: () => drinkLoader.loadMany(drinkType._doc.createdDrinks),
}
Я хочу, чтобы эта часть madeDrinks возвращала массив объектов напитка, но она возвращает только массив _ids.
Я читал документацию mon goose, и кажется, что использование ObjectId - правильный путь. Не могли бы вы помочь мне?
Заранее спасибо.