【问题标题】:Storing embedded entity in Datastore, it's ignoring exclude_from_indexes from embedded在 Datastore 中存储嵌入式实体,它忽略了嵌入式的 exclude_from_indexes
【发布时间】:2015-10-28 13:09:42
【问题描述】:

我正在尝试使用一个字段大于 1500 字节的嵌入式实体。根据文档,建议从索引中排除该字段,并且应该允许 1MB。

我将该字段添加到嵌入实体的 exclude_from_indexes 键中。当我尝试保存父实体时,它告诉我该字段大于 1500 字节。如果我独立保存嵌入的实体,它可以工作。

嵌入实体是否忽略 exclude_from_indexes?

client = datastore.Client(dataset_id=projectID)
record_key = client.key('Record', my_id)
record_entity = datastore.Entity(record_key)

embedded_key = client.key('Data', another_id)
embedded_entity = datastore.Entity(key=embedded_key,exclude_from_indexes=('big_field',))
embedded_entity['field1']='1234'
embedded_entity['big_field']='large string bigger than 1500bytes'

record_entity['RandomFieldName']=embedded_entity

client.put(record_entity)
#Error: gcloud.exceptions.BadRequest: 400 The value of property "big_field" is longer than 1500 bytes.

client.put(embedded_entity)
#No Error

【问题讨论】:

  • 嵌入式实体很棘手!祖先键可能是一个更好的方法来做到这一点,但也有取舍。这可能是库中的错误或 Datastore 不支持。

标签: google-cloud-datastore gcloud-python google-cloud-python


【解决方案1】:

这应该是一个有效的调用。您可以使用 API explorer for Datastore 自行尝试。

这可能是gcloud-python 中的一个错误,当您使用嵌入式实体时,它无法正确传递索引信息。

我看到您还提交了bug on the gcloud-python github,我建议您继续关注。

【讨论】:

  • 谢谢,将通过 Github 继续对话。
猜你喜欢
  • 2021-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-08
  • 1970-01-01
  • 2020-11-07
  • 1970-01-01
相关资源
最近更新 更多