我从graphql开始,我正在尝试删除graphql中的节点,但我没有得到它。
这是我的解析器:
export default {
Query: {
allLinks: async (root, data, { mongo: { Links } }) =>
Links.find({}).toArray()
},
Mutation: {
createLink: async (root, data, { mongo: { Links }, user }) => {
const newLink = Object.assign({ postedById: user && user._id }, data);
const response = await Links.insert(newLink);
return Object.assign({ id: response.insertedIds[0] }, newLink);
},
removeLink: async (root, { id }, { mongo: { Links }, user }) => {
const newLink = Object.assign({ postedById: user && user._id });
const response = await Links.remove(id);
return Object.assign(response, newLink);
},
createUser: async (root, data, { mongo: { Users } }) => {
const newUser = {
name: data.name,
email: data.authProvider.email.email,
password: data.authProvider.email.password
};
const response = await Users.insert(newUser);
return Object.assign({ id: response.insertedIds[0] }, newUser);
},
signinUser: async (root, data, { mongo: { Users } }) => {
const user = await Users.findOne({ email: data.email.email });
if (data.email.password === user.password) {
return { token: `token-${user.email}`, user };
}
}
},
Link: {
id: root => root._id || root.id,
postedBy: async ({ postedById }, data, { dataloaders: { userLoader } }) => {
return await userLoader.load(postedById);
}
},
User: {
id: root => root._id || root.id
}
};
所有突变都正常工作,而不是removeLink。
当我运行removeLink变异时,我收到了这个错误:
MongoError:'q'的类型错误。期待一个对象,得到一个字符串。
我知道有些事情是错的,但我不知道是什么。
答案 0 :(得分:1)
您应该使用deleteOne()
代替remove()
,因为remove()
已被弃用。也没有任何理由发回您最近删除的链接。
尝试这样的事情(不要知道你的其余代码,所以我无法测试它):
removeLink: async (root, { id }, { mongo: { Links }, user }) => {
return await Links.deleteOne({ id });
},
如果您仍想要返回已删除的链接:
removeLink: async (root, { id }, { mongo: { Links }, user }) => {
const newLink = Object.assign({ postedById: user && user._id });
const response = await Links.deleteOne({ id });
return Object.assign(response, newLink);
},
答案 1 :(得分:0)
你的问题似乎与你如何使用MongoDB而不是GraphQL有关。如果您查看the docs for the Collection.remove()
方法,您会发现您可以将其称为"查询" Mongo将删除所有符合条件的项目。
在您的情况下,您的查询似乎无效。您传递的是字符串id
,但您应该将对象{ id: <some value> }
传递给它。我认为你想要的那条线是:
const response = await Links.remove({ id: id});