在使用新的Google Firestore数据存储区模式(我已经使用旧版本的数据存储区)来掌握查询在交易中的实际工作方式时,我遇到了困难。
根据documentation,这些是在数据存储区模式下使用Google Cloud Direbase的好处:
- 最终的一致性,所有Cloud Datastore查询都变得高度一致。
- 交易不再局限于25个实体组。
- 对实体组的写入不再限于每秒1个。
由于查询现在已经非常一致,因此我认为可以在事务内使用非祖先查询,但是在documentation中则相反:
交易内部的查询必须是祖先查询
深思熟虑之后,我决定尝试看看我的怀疑是否正确:
query := datastore.NewQuery("Entity").Filter("indexed_property =", s)
ctx := context.Background()
tx, err := client.NewTransaction(ctx, datastore.ReadOnly)
if err != nil {
fmt.Pritnln(err)
}
query = query.Transaction(tx)
it := d.client.Run(ctx, query)
e := new(Entity)
_, err = it.Next(e)
if err != nil || err == iterator.Done {
fmt.Println(err)
}
令我惊讶的是,它完美无缺。这是错误还是正确的行为?
答案 0 :(得分:2)
您是正确的。这是文档中的错误。数据存储模式下的Cloud Firestore消除了限制,即交易内部的查询必须是祖先查询。
页面现已更新。对此感到抱歉。