python - 如何更改 NDB 记录的祖先?

标签 python google-app-engine google-cloud-datastore

在高复制数据存储(我正在使用 NDB)中,一致性是最终的。为了获得有保证的完整集,可以使用祖先查询。祖先查询还提供了一种很好的方法,可以通过无情查询获取特定祖先的所有“ child ”。简而言之,能够利用祖先模型在 GAE 中非常有用。

我遇到的问题似乎相当简单。假设我有一个联系人记录和一个消息记录。给定的联系人记录被视为每条消息的祖先。但是,可能会为同一个人创建两个联系人(用户错误、不同的数据点等)。这种情况会产生两个联系人记录,其中有与之相关的消息。

我需要能够“合并”这两条记录,并将所有消息放入一大堆中。理想情况下,我能够修改其中一个记录的子项的祖先。

我能想到的唯一方法是创建映射并让我的应用程序检查记录是否已合并。如果有,请查看映射以找到一个或多个相关记录,并对这些记录执行查询。这似乎非常低效。是否有更多“按部就类”的方式处理此用例?

最佳答案

更改实体祖先的唯一方法是删除旧的并使用新键创建新的。这必须对祖先路径中的所有子(和孙子等)实体完成。如果这不可能,那么您列出的解决方案就可以了。

这是必需的,因为实体的祖先路径是其唯一键的一部分。实体的父项(即祖先路径中的实体)不需要存在,因此更改父项的键将使数据存储中的子项没有父项。

关于python - 如何更改 NDB 记录的祖先?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11854137/

相关文章:

python - Django:根据注释获取重复项

使用 Ajax 的 Javascript POST 到 Django 不起作用

python - GAE任务队列: Sample code for accessing pull queue from outside App Engine?

java - Google App EngineFlexible 项目的 SRC 文件夹为空

java - 如何将我的 Google App Engine 数据存储中的数据写入 com.google.appengine.api.datastore.Text

python - 如何在Python中每次跳过文件中的一行?

python - 如何对以下元组列表进行唯一组合

python - 显示在模板中存储为二进制 blob 的图像

python - Django 并使用处理程序从查询字符串获取信息

java - 在 Cloud Datastore 中,如果所有仪表板都显示 'Okay",如何确定我违反了哪些配额