Как получить массив объекта вместо просто _id в Mongoose - PullRequest
0 голосов
/ 29 января 2020

Я очень новичок в пн 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 - правильный путь. Не могли бы вы помочь мне?

Заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...