当使用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个重复项的列表。
同一页面上的其他解析器具有非常相似的功能,但使用不同的集合工作得非常好
1条答案
按热度按时间wbgh16ku1#
所以我发现了这个问题,这是因为我的对象中有多个不是唯一标识符的属性id。Apollo将这些属性缓存为相同的,因为多个数据点具有相同的“id”。