猫鼬findOne方法返回null

时间:2018-10-21 00:21:52

标签: reactjs mongodb mongoose graphql

我正在关注this教程。即使代码恰好是本教程中提到的内容,但是每次我运行graphql突变查询来更新特定的tweet时,它都会返回null并在cmd上记录null

我验证了猫鼬的版本相同(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 :(得分:0)

您有错字。在MongoDB中,关键字段是 _id NOT id。除非提供,否则它将由MongoDB自动添加,因此您需要更改代码以使用_id。