Мутация MongoDB возвращает пустой объект - PullRequest
0 голосов
/ 06 октября 2019

Я работаю над проектом Apollo Server + Express + MongoDB + Mongoose, у меня есть схема Site, в которой есть два свойства, которые содержат User ссылки: owner и users. Оба сохраняются, но только owner содержит данные пользователя после сохранения.

Это определение модели Mongoose:

import mongoose, { Schema } from 'mongoose';

const siteSchema = new Schema({
  name: {
    type: String,
    required: true
  },
  origins: {
    type: [String]
  },
  owner: {
    type: Schema.Types.ObjectId,
    ref: 'User'
  },
  users: {
    type: [Schema.Types.ObjectId],
    ref: 'User'
  },
  createdOn: {
    type: String
  },
  updatedOn: {
    type: String
  }
});

export const Site = mongoose.model('site', siteSchema);

Это определение типа сайта:

import { gql } from 'apollo-server-express';

const site = gql`
        extend type Site {
          id: String
          name: String
          owner: User
          origins: [String]
          users: [User]
          createdOn: String
          updatedOn: String
        }

        extend type Query {
          sites: [Site]
          site(id: ID!): Site
        }

        extend type Mutation {
          addSite(name: String!, owner: [String!], origins: [String], users: [String]): Site
          updateSite(id: ID!, name: String, owner: [String], origins: [String], users: [String]): Site
          deleteSite(id: ID!): Result
        }
    `;

export default site;

А это мой распознаватель updateSite:

import { Site } from '../models/Site';

export default {
  Mutation: {
    updateSite: async (_, args) => {
      let site = await Site.findById(args.id)
      .populate({
        path: 'owner',
        model: User
      }).populate({
        path: 'users',
        model: User
      })
      .exec();

      if (!site) {
        throw {
          success: false,
          message: "No existe el sitio"
        };
      }

      site.updatedOn = Date.now();

      try {
        if (args.name) {
          site.name = args.name;
        }

        if (args.origins) {
          site.origins = args.origins;
        }

        if (args.owners) {
          site.owners = args.owners;
        }

        site.users = args.users;

        site = await site.save();

        return site;
      } catch (e) {
        throw e.message;
      }
    },
  }
}

Если я зарегистрирую константу site перед ее назначением. Он покажет объект users и owner. Но после этого он покажет как null данные для объекта users на площадке MongoDB и просто строку в консоли IDE.

Чего мне не хватает? Любые комментарии приветствуются.

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