Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb 您能否使用Apollo GraphQL的服务器端使用对象数组更新现有数据?_Mongodb_Graphql_Apollo_Graphql Mutation - Fatal编程技术网

Mongodb 您能否使用Apollo GraphQL的服务器端使用对象数组更新现有数据?

Mongodb 您能否使用Apollo GraphQL的服务器端使用对象数组更新现有数据?,mongodb,graphql,apollo,graphql-mutation,Mongodb,Graphql,Apollo,Graphql Mutation,小背景: 我正在为我的同事构建一个梦幻般的FPL应用程序,这样我们就可以拥有自己的应用程序,拥有自己的数据和联盟。我在FE上使用Vue.js,在BE上使用GraphQL+Apollo+MongoDB 为了澄清这个问题:如果可能的话,我想用从外部restapi获取的数据更新我的DB,这些数据是在后端使用一个变种获取的 因此,我已经手动向DB添加了一些初始数据(其中一些数据在外部API中不存在,如玩家化身),现在我想通过查询外部REST API来更新一些现有数据字段。即分数、等级、总分等 我已成功地

小背景:

我正在为我的同事构建一个梦幻般的FPL应用程序,这样我们就可以拥有自己的应用程序,拥有自己的数据和联盟。我在FE上使用Vue.js,在BE上使用GraphQL+Apollo+MongoDB

为了澄清这个问题:如果可能的话,我想用从外部restapi获取的数据更新我的DB,这些数据是在后端使用一个变种获取的

因此,我已经手动向DB添加了一些初始数据(其中一些数据在外部API中不存在,如玩家化身),现在我想通过查询外部REST API来更新一些现有数据字段。即分数、等级、总分等

我已成功地通过查询从REST API获取数据,并使用Apollo文档中找到的Apollo RESTDataSource对其进行了缩减:

在我的响应中,我得到一个包含我想要迭代的对象的数组,并相应地更新数据库,以便在匹配后始终显示最新的数据

阵列中的对象示例:

 {
     "id": 57643299,
     "event_total": 71,
     "player_name": "John Doe",
     "rank": 1,
     "last_rank": 1,
     "rank_sort": 1,
     "total": 580,
     "entry": 10432744,
     "entry_name": "Amazing team name"
},
我有一个updateGameWeek变异,当我在Graphiql游乐场中使用它时,它可以工作,但是我想知道是否有一种方法可以在后端调用变异

既然有许多对象需要根据其在后端的对应ID进行更新,那么我需要对其进行多次迭代,那么我该怎么做呢

下面是一个有效的updateQuery示例:

mutation updateGameWeek{
  updateGameWeek(player_id: 29729805, input: {
    avatar:"somestring"
    player_id: 29324805
  })
这个变异正确地通过id更新了玩家的头像,它基本上是我在通过玩家id更新整个DB时想要使用的蓝图

以下是GameWeek对象的外观/定义:

type GameWeek {
        avatar: String
        team_id: Int
        points: Float
        player_name: String
        rank: Int
        previous_rank: Int
        total: Float
        player_id: ID!
        team_name: String
    }
以及上述突变的实际分解器是什么样子的:

module.exports = async (_, { id, input }, { models }) => {
    try {
        const gameWeekToUpdate = await models.GameWeek.findOne({ _player_id: id });

        Object.keys(input).forEach(value => {
            gameWeekToUpdate[value] = input[value];
        });
        const updatedGameWeek = await gameWeekToUpdate.save();
        
        return updatedGameWeek;
    } catch (error) {
        console.log('Error in updateGameWeek Mutation', error)
    }
}

为什么?不需要。。。只需在模型上编写另一个(或更改现有)解析器[获取输入数组]。。。Promise.all()我实际上已经尝试过了,但在解析器中找不到任何好的方法,我使用了上面解析器中的代码,并对其进行了一些修改,以便数据能够正确工作,但没有效果。如果您有任何关于我如何编写该解析器的示例,那么将不胜感激。搜索一些“[graphql]Promise.all resolver”
module.exports = async (_, { id, input }, { models }) => {
    try {
        const gameWeekToUpdate = await models.GameWeek.findOne({ _player_id: id });

        Object.keys(input).forEach(value => {
            gameWeekToUpdate[value] = input[value];
        });
        const updatedGameWeek = await gameWeekToUpdate.save();
        
        return updatedGameWeek;
    } catch (error) {
        console.log('Error in updateGameWeek Mutation', error)
    }
}