javascript GraphQL在前端返回重复项(不存在),但在后端不返回

mwkjh3gx  于 2023-02-18  发布在  Java
关注(0)|答案(1)|浏览(135)

当使用graphql沙盒测试我从MongoDB查询的数据时,返回了与我的查询相关的多个唯一的数据点,但是当我在前端使用相同的查询时,我多次获得一个数据点的数组(等于放在.limit()中的数字)
Query在Mongo和apollo沙盒上运行良好,但从前端调用时就不行了。
这是相关的冲突解决程序:

> players: async (parent, { id }) => {
> return Player.find({ id: id }).sort({ game_id: -1 }).limit(3);
>     },
>

这些是相关的类型定义

> type Player {
> _id: ID
> game_id: Int
> id: String
> player_name: String
> PTS: Int
>   }
> 
> type Query {
> players(id: String): [Player]
>   }

This is the relevant query

> export const GET_PLAYER = gql`
> query Players($playersId: String) {
> players(id: $playersId) {
> _id
> game_id
> player_name
> PTS
>        }
>      }

当在apollosandbox中使用这个带有相关id的查询时,我得到了这个数据数组

> {
>   "data": {
>     "players": [
>       {
>         "_id": "63ea73d4297006c9dffa349a",
>         "game_id": 401468894,
>         "id": "4432158",
>         "PTS": 23
>       },
>         {
>         "_id": "63ea73d3297006c9dffa3463",
>         "game_id": 401468888,
>         "id": "4432158",
>         "PTS": 21
>       },
>       {
>         "_id": "63ea73d1297006c9dffa3387",
>         "game_id": 401468870,
>         "id": "4432158",
>         "PTS": 12
>       }
>     ]
>   }
> }
>

这是我想要的数据^^^^^^^^^^^^^^^^^^^
但是当在前端使用useQuery调用这个查询时
const { loading, error, data, refetch } = useQuery(GET_PLAYER, { variables: { playersId:player}, });
它给了我一个数组3(我的限制数量),只有第一个对象像这样

> 0
> 
> {__typename: 'Player', _id: '63ea73d3297006c9dffa3463', game_id: 401468888, id: '4432158', player_name: 'evan-mobley', …}
> 1
> 
> {__typename: 'Player', _id: '63ea73d3297006c9dffa3463', game_id: 401468888, id: '4432158', player_name: 'evan-mobley', …}
> 2
> 
> {__typename: 'Player', _id: '63ea73d3297006c9dffa3463', game_id: 401468888, id: '4432158', player_name: 'evan-mobley', …}
>

如你所见它们都是一样的
当我像这样从解析器中取出变量时

> players: async (parent, { id }) => {
> return Player.find().sort({ game_id: -1 }).limit(3);
>     },

它按照我期望的方式获取数据,但是如果我在find操作符中放入任何变量,我会得到一个包含3个重复项的列表。
同一页面上的其他解析器具有非常相似的功能,但使用不同的集合工作得非常好

wbgh16ku

wbgh16ku1#

所以我发现了这个问题,这是因为我的对象中有多个不是唯一标识符的属性id。Apollo将这些属性缓存为相同的,因为多个数据点具有相同的“id”。

相关问题