例如,从提供的appengine-angular-gotodos 中获取以下代码片段:func getAllTodos(c appengine.Context) ([]Todo, error) { todos := []Todo{} ks, err := datastore.NewQuery("Todo").Ancestor(defaultTodoList(c)).Order("Created").GetAll(c, &todos) if err != nil { return nil, err } for i := 0; i < len(todos); i++ { todos[i].Id = ks[i].IntID() } return todos, nil}如果将查询更改为不包含.Ancestor(defaultTodoList(c)).该函数,则无法返回任何待办事项结果。如果实体与祖先一起保存,您是否必须通过该祖先查询它?无论实体是子实体还是根实体,您如何查询实体?鉴于需要进行无祖先查询,在对应用程序建模时应该考虑哪些性能和架构?
2 回答
白衣染霜花
TA贡献1796条经验 获得超10个赞
如果实体与祖先一起保存,您是否必须通过该祖先查询它?
不,你不必。
无论实体是子实体还是根实体,您如何查询实体?
从这里简化为尽可能简单的示例:
//Assuming c is your appengine context
q = datastore.NewQuery("MyObject") // Can add filters and sorting here if desired.
for t := q.Run(c);; {
var x MyObject
key, err := t.Next(&x)
}
我还在这里找到了这个注释:
注意:设置祖先过滤器允许强一致性查询。没有祖先过滤器的查询只返回最终一致的结果。
这很重要,因为我相信现在所有的数据存储都是 HRD。您可以阅读有关高复制数据存储的更多信息。
- 2 回答
- 0 关注
- 204 浏览
添加回答
举报
0/150
提交
取消