Мангуст метод findOne возвращает ноль - PullRequest
0 голосов
/ 21 октября 2018

Я следую этому учебнику.Несмотря на то, что код является именно тем, что упомянуто в учебнике, каждый раз, когда я запускаю запрос мутации graphql для обновления определенного твита, он возвращает null и регистрирует null в cmd.

Я проверял версию mongooseТо же самое (4.11.3). Я считаю, что с методом findOne что-то не так, поскольку даже в обработчике deleteTweet findOne возвращает null.Это потому, что findOne нужен обратный вызов?но в учебнике обратный вызов не пройден.Я также заметил, что findOneAndUpdate работает нормально, но создает новую запись, обновляя существующий твит.

  updateTweet: async (_, { id, ...rest}, { user }) => {
    try {
      await requireAuth(user)
      const tweet = await Tweet.findOne({ id, user: user.id });
      console.log(tweet);

      if(!tweet) {
        throw new Error('Not Found!');
      }

      return tweet.save();

    } catch (e) {
      throw e;
    }
  },


  deleteTweet: async (_, { id }, { user }) => {
    try {
      await requireAuth(user);
      const tweet = await Tweet.findOne({ id, user: user.id });

      if(!tweet) {
        throw new Error('Not Found !')
      }

      await tweet.remove();
      return {
        message: "Deleted Tweet Successfully"
      }
    }catch(error) {
      throw error;
    }
  }
}

TweetSchema

import mongoose, { Schema } from 'mongoose';

const TweetSchema = new Schema({
  text: {
   type: String,
   minlength: [5, 'Text need to be longer'],
   maxlength: [144, 'Text is too long'],
 },
  user: {
    type: Schema.Types.ObjectId,
    ref: 'User'
  },
  favoriteCount: {
    type: Number,
    default: 0
  }
}, { timestamps: true})

export default mongoose.model('Tweet', TweetSchema);

1 Ответ

0 голосов
/ 21 октября 2018

У вас есть опечатка.В MongoDB ключевым полем является _id NOT id.MongoDB добавляет это автоматически, если не предоставлено, поэтому вам нужно изменить код, чтобы использовать вместо него _id.

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