我具有以下结构:
@Converter(autoApply = true)
public class CurrencyConverter implements AttributeConverter<Currency, String> {
@Override
public String convertToDatabaseColumn(Currency currency) {
return currency.getCurrencyCode();
}
@Override
public Currency convertToEntityAttribute(String currencyCode) {
return Currency.getInstance(currencyCode);
}
}
在google数据存储区中,我存储如下:
type MyEntity struct {
DSGeneratedID int64 json:"-" datastore:"-"
Phone string json:"phone"
Name string json:"name"
Address string json:"address"
}
说,我想更改电话号码值。现在,如果我知道“ key.id”的值,则可以使用下面的代码并实现我想要的。
Name/ID:
id=5101067637358592
Name:
Sandy
Phone:
9275939377
Address:
24, Nehru road, Chennai
但是为此,我需要此键 5101067637358592 。现在,如果我知道姓名,地址和旧电话号码,有什么办法可以获取密钥/ ID?
或者如果还有其他方法可以做到,请告诉我。
答案 0 :(得分:0)
如果您想在不知道实体键的情况下查询实体,则需要能够通过被索引实体的其他字段构造查询。为了唯一地标识一个实体,您将需要一个返回单个实体的查询。通常使用逻辑唯一键字段完成此操作。例如,用户的电子邮件可以是这样的字段。
答案 1 :(得分:0)
来自标准Task类
// Task is the model used to store tasks in the datastore.
type Task struct {
Desc string `datastore:"description"`
Created time.Time `datastore:"created"`
Done bool `datastore:"done"`
id int64 // The integer ID used in the datastore.
}
您可以从查询中获取已知字段的密钥ID。
var tasks []*Task
query := datastore.NewQuery("Task").Order("created")
keys, err := client.GetAll(ctx, query, &tasks)
if err != nil {
return nil, err
}
// Set the id field on each Task from the corresponding key.
for i, key := range keys {
tasks[i].id = key.ID
}
然后,使用事务将实体更新到数据存储。 来自documentation。
tx, err := client.NewTransaction(ctx)
if err != nil {
log.Fatalf("client.NewTransaction: %v", err)
}
var task Task
if err := tx.Get(taskKey, &task); err != nil {
log.Fatalf("tx.Get: %v", err)
}
task.Priority = 5
if _, err := tx.Put(taskKey, &task); err != nil {
log.Fatalf("tx.Put: %v", err)
}
if _, err := tx.Commit(); err != nil {
log.Fatalf("tx.Commit: %v", err)
}