如何从 GO 中的 memDB 中删除条目
How to remove an entry from memDB in GO
我正在用 github.com/hashicorp/go-memdb
做这样的事情:
// Create a sample struct
type Person struct {
Email string
Name string
Age int
}
// Create the DB schema
schema := &memdb.DBSchema{
Tables: map[string]*memdb.TableSchema{
"person": &memdb.TableSchema{
Name: "person",
Indexes: map[string]*memdb.IndexSchema{
"id": &memdb.IndexSchema{
Name: "id",
Unique: true,
Indexer: &memdb.StringFieldIndex{Field: "Email"},
},
"age": &memdb.IndexSchema{
Name: "age",
Unique: false,
Indexer: &memdb.IntFieldIndex{Field: "Age"},
},
},
},
},
}
// Create a new data base
db, err := memdb.NewMemDB(schema)
if err != nil {
panic(err)
}
// Create a write transaction
txn := db.Txn(true)
// Insert some people
people := []*Person{
&Person{"joe@aol.com", "Joe", 30},
&Person{"lucy@aol.com", "Lucy", 35},
&Person{"tariq@aol.com", "Tariq", 21},
&Person{"dorothy@aol.com", "Dorothy", 53},
}
for _, p := range people {
if err := txn.Insert("person", p); err != nil {
panic(err)
}
}
// Commit the transaction
txn.Commit()
我的问题是如何删除 joe@aol.com
?
通过将唯一索引字段设置为所需值的对象传递来使用 Txn.Delete
。
根据您的模式,唯一索引与结构 Email
字段相关联,因此将具有该字段的 Person
结构传递给 Delete
(它不必是一个指针):
// new read tx
deltxn := db.Txn(true)
err = deltxn.Delete("person", Person{Email: "joe@aol.com"})
如果要删除多个条目,请使用 Txn.DeleteAll
并传递 table 名称、索引名称和过滤值。它returns删除的条目数:
deltxn = db.Txn(true)
// deleting all entries with age=30
d, err = txn.DeleteAll("person", "age", 30)
// d is 1
我正在用 github.com/hashicorp/go-memdb
做这样的事情:
// Create a sample struct
type Person struct {
Email string
Name string
Age int
}
// Create the DB schema
schema := &memdb.DBSchema{
Tables: map[string]*memdb.TableSchema{
"person": &memdb.TableSchema{
Name: "person",
Indexes: map[string]*memdb.IndexSchema{
"id": &memdb.IndexSchema{
Name: "id",
Unique: true,
Indexer: &memdb.StringFieldIndex{Field: "Email"},
},
"age": &memdb.IndexSchema{
Name: "age",
Unique: false,
Indexer: &memdb.IntFieldIndex{Field: "Age"},
},
},
},
},
}
// Create a new data base
db, err := memdb.NewMemDB(schema)
if err != nil {
panic(err)
}
// Create a write transaction
txn := db.Txn(true)
// Insert some people
people := []*Person{
&Person{"joe@aol.com", "Joe", 30},
&Person{"lucy@aol.com", "Lucy", 35},
&Person{"tariq@aol.com", "Tariq", 21},
&Person{"dorothy@aol.com", "Dorothy", 53},
}
for _, p := range people {
if err := txn.Insert("person", p); err != nil {
panic(err)
}
}
// Commit the transaction
txn.Commit()
我的问题是如何删除 joe@aol.com
?
通过将唯一索引字段设置为所需值的对象传递来使用 Txn.Delete
。
根据您的模式,唯一索引与结构 Email
字段相关联,因此将具有该字段的 Person
结构传递给 Delete
(它不必是一个指针):
// new read tx
deltxn := db.Txn(true)
err = deltxn.Delete("person", Person{Email: "joe@aol.com"})
如果要删除多个条目,请使用 Txn.DeleteAll
并传递 table 名称、索引名称和过滤值。它returns删除的条目数:
deltxn = db.Txn(true)
// deleting all entries with age=30
d, err = txn.DeleteAll("person", "age", 30)
// d is 1