【问题标题】:NDB query with structured propertiy and projection give unexpected result具有结构化属性和投影的 NDB 查询给出了意想不到的结果
【发布时间】:2016-09-17 13:34:03
【问题描述】:

您好,我有这些型号:

class TagProprieta(ndb.Model):
    tag = ndb.StringProperty()
    stato =  ndb.StringProperty()

class RegDevice(ndb.Model):
    comune_key = ndb.KeyProperty()
    reg_id = ndb.StringProperty()
    tags = ndb.StructuredProperty(TagProprieta, repeated=True)
    ....

此查询返回预期结果(包含一些 RegDevice 对象的列表):

    registration_ids = models.RegDevice.query(\
        models.RegDevice.comune_key==comune_key,\
        models.RegDevice.tags == models.TagProprieta(tag=tag, stato='1')\
        ).fetch()

由于我只需要字段 reg_id,所以我将最后一行更改为:

.fetch(projection=[models.RegDevice.reg_id])

结果是一个空列表:[ ]

由于 NDB 的限制,如果我有 错误,我会非常好,但在我看来,空列表不正确。 我做错了什么吗?我唯一的机会是使用前一个查询,然后在内存中处理结果吗?谢了

【问题讨论】:

    标签: python-2.7 google-app-engine database-design google-cloud-datastore app-engine-ndb


    【解决方案1】:

    必须为reg_id 建立索引才能使投影工作。

    https://cloud.google.com/appengine/docs/standard/python/ndb/projectionqueries#Python_Limitations_on_projections

    尝试在您的 index.yaml 中手动设置它

    - kind: RegDevice
      properties:
      - name: reg_id
    

    【讨论】:

      【解决方案2】:

      试试这个:

      registration_ids = models.RegDevice.query(\
          models.RegDevice.comune_key==comune_key,\
          models.RegDevice.tags == models.TagProprieta(tag=tag, stato='1'),\
          projection=[models.RegDevice.reg_id]
          ).fetch()
      

      【讨论】:

      • 试过了,结果和以前一样: [] ,但是 THX
      • projection=[RegDevice.reg_id] 怎么样?
      • projection=["reg_id"]?
      • 最后一个建议导致错误:未定义全局名称'reg_id',上一个:同样的错误
      • 如果你使用:.fetch(projection=["reg_id"])?
      猜你喜欢
      • 2020-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-19
      • 2017-01-05
      • 2021-10-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多