Mongodb 您能否使用Apollo GraphQL的服务器端使用对象数组更新现有数据?
小背景: 我正在为我的同事构建一个梦幻般的FPL应用程序,这样我们就可以拥有自己的应用程序,拥有自己的数据和联盟。我在FE上使用Vue.js,在BE上使用GraphQL+Apollo+MongoDB 为了澄清这个问题:如果可能的话,我想用从外部restapi获取的数据更新我的DB,这些数据是在后端使用一个变种获取的 因此,我已经手动向DB添加了一些初始数据(其中一些数据在外部API中不存在,如玩家化身),现在我想通过查询外部REST API来更新一些现有数据字段。即分数、等级、总分等 我已成功地通过查询从REST API获取数据,并使用Apollo文档中找到的Apollo RESTDataSource对其进行了缩减: 在我的响应中,我得到一个包含我想要迭代的对象的数组,并相应地更新数据库,以便在匹配后始终显示最新的数据 阵列中的对象示例: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来更新一些现有数据字段。即分数、等级、总分等 我已成功地
{
"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)
}
}