具有结构化属性和投影的 NDB 查询给出意外结果

NDB query with structured propertiy and projection give unexpected result

嗨,我有这些模型:

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)
    ....

此查询returns预期结果(包含一些 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 的限制,我会非常好,但在我看来 空列表不正确。 我做错了什么吗?我唯一的机会是使用前一个查询,然后在内存中处理结果吗?谢谢

试试这个:

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()

必须为 reg_id 编制索引才能使投影正常工作。

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

尝试在 index.yaml

中手动设置它
- kind: RegDevice
  properties:
  - name: reg_id