2017-07-25 15 views
0

私は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: Wrong type for 'q'. Expected a object, got a string.

私は何かが間違っていることを知っているが、私は何であるかを知りません。

+0

"正しく動作していない"とはどういう意味ですか? GraphQLはエラーを返しますか?もしそうなら、何?また、問題は、GraphQLエンドポイントに提出しているクエリや型定義に問題がある可能性があります。 –

+0

申し訳ありませんが、エラーを報告するのを忘れていました。私は私の質問を更新します –

答えて

1

remove()の代わりにdeleteOne()を使用してください。remove()は推奨されていません。最近削除したリンクを返送する理由もありません。

(私はそれをテストすることができませんでしたあなたのコードの残りの部分を知っていない)、このような何かを試してみてください:

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); 
}, 

removeLink: async (root, { id }, { mongo: { Links }, user }) => { 
    return await Links.deleteOne({ id }); 
}, 

あなたはまだ削除されたリンクを返すしたい場合

+0

どのような情報が必要ですか?私のスキーマ?あなたの答えで、私はこのエラーを受け取りました: "null不可能なフィールドLink.idのためにnullを返すことはできません" –

+1

あなたのスキーマでは、removeLinkの突然変異のためのリンクを送り返すことを期待するべきではありません。それでも削除されたリンクを返す場合は、 'Links.remove()'を自分の 'Links.deleteOne()'に置き換え、それが動作するかどうか確認してください。 (私はあなたがそれを見てみたい場合は、より完全なコードで私の答えを編集しました。) –

+0

削除されたリンクを返すことは望ましくない、私はちょうどこのリムーニングを行う方法を知らなかった。しかし私は自分のスキーマで何を返すのですか? 'removeLink(id:ID!):?' –

0

GraphqlではなくMongoDBの使い方に問題があるようです。 the docs for the Collection.remove()メソッドを見ると、Mongoが条件に一致するすべての項目を削除する「クエリ」と呼ぶものを渡すことができます。

あなたのケースでは、クエリが無効であるようです。文字列idを渡していますが、オブジェクト{ id: <some value> }を渡す必要があります。私はあなたが望む線は次の通りだと考えています:

const response = await Links.remove({ id: id}); 
関連する問題