33 lines
678 B
Go
33 lines
678 B
Go
package kv
|
|
|
|
import (
|
|
"github.com/dgraph-io/badger/v4"
|
|
)
|
|
|
|
// ListByPrefix returns all key-value pairs whose key starts with prefix.
|
|
func ListByPrefix(db *badger.DB, prefix string) (map[string]string, error) {
|
|
result := make(map[string]string)
|
|
p := []byte(prefix)
|
|
|
|
err := db.View(func(txn *badger.Txn) error {
|
|
opts := badger.DefaultIteratorOptions
|
|
opts.PrefetchSize = 10
|
|
|
|
it := txn.NewIterator(opts)
|
|
defer it.Close()
|
|
|
|
for it.Seek(p); it.ValidForPrefix(p); it.Next() {
|
|
item := it.Item()
|
|
key := string(item.Key())
|
|
|
|
val, err := item.ValueCopy(nil)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
result[key] = string(val)
|
|
}
|
|
return nil
|
|
})
|
|
|
|
return result, err
|
|
}
|