私は mysql を使用して meteor で react-apollo を使用し、続編を作成しています。私はまだ JS の初心者です。apollo-server に次のリゾルバ機能があると仮定しましょう:
export default resolvers = {
Query: {
posts(_, args){
return Post.findAndCountAll({ where: args });
},
numberOfPosts(){
return /// the number of selected posts
}
}
いくつかの条件が満たされたデータベースからいくつかのデータを選択し、選択された行の数を数えてフィールド「numberOfPosts」に返したいと思います。
findAndCountAll()
選択した行とカウントを含むオブジェクトを返します。post()
選択した行のみを返すようにし、選択した投稿の数のみを返すように numberOfPosts() を取得したいと思います。現在、両方とも posts() によって返されます。
私のスキーマは次のとおりです。
type Post {
id: Int
date: Float
text: String
}
type NumberOfPosts{
total: Int
filtered: Int
}
type Query {
posts(
id: Ind,
offset: Int,
limit: Int,
filter: String): [Post]
numberOfPosts:[NumberOfPosts]
}
schema {
query: Query
}
目標は、次の形式でデータを受け取ることです。
{
"data": {
"numberOfPosts": [
{
"total": 1000,
"filtered": 21
}
],
"posts": [
{
"id": 4,
"date": 5105626122,
"text": "jzybiwutudi"
},
...
]
}
}
これまでの私の仕事: 1 を試してください:
let selectedCount;
export default resolvers = {
Query: {
posts(_, args){
return Post.findAndCountAll({where: args}).then(
function (results) {
selectedCount = results.count;
return results.rows
});
},
numberOfPosts(){
return selectedCount
}
}}
そのため、リゾルバーの外部で補助変数を定義し、それを選択した行の数に設定すると、 でカウントが返されますnumberOfPosts()
。これは機能しますが、これに関する問題はreturn results.rows
、エラーが発生することであり、理由がわかりません。
別の問題は、それselectedCount
は常に前の行数です
トライ2
うまくいくと思われる別の解決策は、次のように、GraphQL クエリに引数を 2 回渡すことです。
{
numberOfPosts(filter: "example") {
total
filtered
}
posts(filter: "example") {
id
date
text
}
}
次に、両方のリゾルバー関数が同じ引数を認識しているため、同じ投稿を選択してカウントできます。しかし、これは私には正しくないように見えます.同じ引数を2回渡す必要があるため、それらも2回送信されます...