如果在 Gatsby 中布尔键匹配 true,则从对象内的对象数组中获取项目 - Graphql

Posted

技术标签:

【中文标题】如果在 Gatsby 中布尔键匹配 true,则从对象内的对象数组中获取项目 - Graphql【英文标题】:Get items from an array of objects inside objects if a boolean key matches true in Gatsby - Graphql 【发布时间】:2021-11-29 02:38:55 【问题描述】:

我有一个 JSON 文件,我从 Gatsby 中获取数据:

[
  
    "id": 140,
    "books": [
      
        "title": "Bobby Fischer Teaches Chess",
        "recommended": true
      ,
      
        "title": "The Art of War",
      ,
    ]
  ,
  
    "id": 141,
    "books": [
      
        "title": "Why We Sleep",
        "recommended": true
      ,
    ]
  
  ...
]

在 json 中,只有少数书籍将 recommended 键设置为 true。其他人根本没有recommended 密钥。

通过graphql,我想获取所有将recommended 设置为true 以及id 的书籍。我尝试了以下方法:

query MyQuery 
  allEpisodesJson(
    filter: books: elemMatch: recommended: eq: true
  ) 
    edges 
      node 
        id
        books 
          title
          recommended
        
      
    
  

这会返回:


  "data": 
    "allEpisodesJson": 
      "edges": [
        
          "node": 
            "id": "140",
            "books": [
              
                "title": "Bobby Fischer Teaches Chess",
                "recommended": true
              ,
              
                "title": "The Art of War"
                "recommended": null
              
            ]
          
        ,
        
          "node": 
            "id": "141",
            "books": [
              
                "title": "The Art of Computer Programming"
                "recommended": true
              
            ]
          
        
      ]
    
  


注意节点中的第二本书id 140。结果也包括该书对象(为空)。我不想那样。

如何仅获取将recommended 明确设置为true 的书籍?

【问题讨论】:

【参考方案1】:

尝试使用ne 过滤器(不等于)并反转条件:

query MyQuery 
  allEpisodesJson(
    filter: books: elemMatch: recommended: ne: false
  ) 
    edges 
      node 
        id
        books 
          title
          recommended
        
      
    
  

或者,您可以尝试使用nin(不在数组中)以及nullfalse (nin: [false, null])

【讨论】:

以上是关于如果在 Gatsby 中布尔键匹配 true,则从对象内的对象数组中获取项目 - Graphql的主要内容,如果未能解决你的问题,请参考以下文章

如果两个值匹配,则从 php 中的多维关联数组中删除重复项

如果值等于,则从对象返回键和值

如果存在匹配值,则从另一个表中检索数据 - 否则基于第一个连接条件返回

如果主工作簿与主工作簿匹配,则从工作簿中查找和循环并复制值

如果item匹配字符串数组,则从Ruby哈希数组中删除项目

如果值等于,则从对象返回键和值