我正在尝试使用golang将项目放入Google数据存储。
尽管我总是遇到datastore: invalid key
错误,但无法弄清楚这里出了什么问题。我正在使用"cloud.google.com/go/datastore"
软件包。
首先,我尝试获取父节点的密钥(不确定这样做是否正确,但是最终得到的datastore.Key
为parentKey
)。
现在使用parentKey
作为父级创建新密钥,然后尝试使用此put
来newKey
项时,我收到invalid key
错误消息。
q := datastore.NewQuery("Supplier")
.Namespace("inventory")
.Filter("Name =", "supplier-01")
.Limit(1)
var s []supplier
parentKey, err := client.GetAll(ctx, q, &s)
if err != nil || len(parentKey) < 1 {
fmt.Printf("could not find parent key: %v\n", err)
return
}
newKey := datastore.IncompleteKey("InventoryItem", parentKey[0])
//newKey := datastore.NameKey("InventoryItem", item.Name, parentKey[0])
if _, err := client.Put(ctx, newKey, &item); err != nil {
fmt.Printf("could not save item: %v\n", err)
return
}
我用NameKey
和IncompleteKey
都尝试过,但是两者都没有运气。
我显然在这里丢失了一些东西,但无法弄清楚它是什么以及如何将我的项目作为另一个节点的子节点写入数据存储。
答案 0 :(得分:1)
Tommy,您在评论中添加了它。您需要在新键上设置名称空间。我没有看到Cloud Datastore Go documentation中隐式地执行此操作的方法,因此在调用Put()之前必须做newKey.namespace = parentKey.namespace。