我正在关注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);
答案 0 :(得分:0)
您有错字。在MongoDB中,关键字段是 _id NOT id。除非提供,否则它将由MongoDB自动添加,因此您需要更改代码以使用_id。