数据存储区模式下的新Google Cloud Firestore查询澄清

时间:2019-06-08 12:09:32

标签: google-cloud-firestore google-cloud-datastore

在使用新的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)
}

令我惊讶的是,它完美无缺。这是错误还是正确的行为?

1 个答案:

答案 0 :(得分:2)

您是正确的。这是文档中的错误。数据存储模式下的Cloud Firestore消除了限制,即交易内部的查询必须是祖先查询。

页面现已更新。对此感到抱歉。