mongodb 模型字段在查询字符串和 GraphQL 查询中不可用

Posted

技术标签:

【中文标题】mongodb 模型字段在查询字符串和 GraphQL 查询中不可用【英文标题】:mongo model fields not available in query string and GraphiQL query 【发布时间】:2019-10-30 11:12:31 【问题描述】:

我正在创建一个项目来查询 GraphQL 中的 mongo 模式。 我有一个模型,它充当 mongo 集合和模式文件,用于使用 graphql Query 映射模型。 当我尝试查询 mongo 模型中的字段时,只有 id 被填充并且无法检索其他字段。

下面的代码sn-p:


models.py
class A(EmbeddedDocument):
    content_length = StringField(name="content-length", required=True)
    expires = StringField()
    destination = StringField()
    subscription = StringField()
    priority = StringField()


class B(DynamicEmbeddedDocument):
    pass

class Store(Document):
    meta = 'collection': 'event_store'
    one = EmbeddedDocumentField(A, required=True)
    two = EmbeddedDocumentField(B, required=True)

schema.py

class StoreType(MongoengineObjectType):

    class Meta:
        model = Store
        interfaces = (Node,)

class Query(graphene.ObjectType):
    node = Node.Field()
    all_stores = MongoengineConnectionField(StoreType)
    store = graphene.Field(StoreType)

    def resolve_all_stores(parent, info, **kwargs):
        return list(EventStoreModel.objects.all())

schema = graphene.Schema(query=Query, types=[StoreType,])

GraphIQL 中的查询: 当前结果:

query
  allEvents
    edges
      node
        id
      
    
  

result

  "data": 
    "allEvents": 
      "edges": [
        
          "node": 
            "id": "RXZlbnQ6NWQwNjFiZTBiMjNjYTAwYTdmMDk5YTgy"
          
        
      ]
    
  

预期结果:

query
  allEvents
    edges
      node
        id,
        one,
        two
      
    
  


  "data": 
    "allEvents": 
      "edges": [
        
          "node": 
            "id": "RXZlbnQ6NWQwNjFiZTBiMjNjYTAwYTdmMDk5YTgy",
            "one":[data],
            "two":[data]
          
        
      ]
    
  

在查询时,我需要来自 Store 模型(一、二)的字段。 提前致谢

【问题讨论】:

你找到解决办法了吗? 【参考方案1】:
class AField(MongoengineObjectType):
    class Meta:
        model = B
        interfaces = (Node,)


class BField(MongoengineObjectType):
    class Meta:
        model = A
        interfaces = (Node,)

【讨论】:

虽然这段代码可能会解决问题,但一个好的答案还应该解释它的作用以及它如何提供帮助?

以上是关于mongodb 模型字段在查询字符串和 GraphQL 查询中不可用的主要内容,如果未能解决你的问题,请参考以下文章

mongoDB中单个字段的字符串或整数查询

MongoDB 查询聚合 localField ObjectId 字符串和外部字段 ObjectId

如何在mongodb的聚合查询中获取虚拟字段?

MongoDb:将模型字段从字符串数组修改为引用另一个模型的 id 数组的最佳方法是啥?

MongoDB 查询技巧(2) - null

MongoDB关联查询