【发布时间】:2019-03-25 10:53:27
【问题描述】:
我正在关注this 教程。尽管代码正是本教程中提到的,但每次我运行 graphql 变异查询来更新特定推文时,它都会返回 null 并在 cmd 上记录 null。
我验证了 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);
【问题讨论】:
-
什么是
id?它的价值是什么? -
Id 由 graphql 生成并存储在 mongodb 上的推文集合中 这是在 graphiql 上运行更新查询后记录的内容 tweets.findOne({ user: ObjectId("5bcbcac57870760db4ff34ab"), id: '5bcbcac57870760db4ff34ab '}, {fields: {} })null
-
所以你的 id 需要是
ObjectId(id) -
Tweet.findOne({ id: mongo.ObjectID(id), user: user.id }) -
但是 TweetSchema 已经有了,请检查编辑。
标签: reactjs mongodb mongoose graphql