我将 BoltDB 与 Golang 结合使用,想要存储然后按照放入数据库的顺序检索我的项目。
我正在使用
设置项目func (r *Bolt) Set(key string, value []byte) error {
return r.Client.Update(func(tx *bolt.Tx) error {
b := tx.Bucket([]byte(r.bucket))
return b.Put([]byte(key), value)
})
}
然后我尝试获取所有项目并使用限制返回前 10 个。
// GetAll will fetch the latest n record from Bolt, up to the limit supplied.
func (r *Bolt) GetAll(limit int) ([][]byte, error) {
var results [][]byte
if err := r.Client.View(func(tx *bolt.Tx) error {
b := tx.Bucket([]byte(r.bucket))
if b == nil {
return fmt.Errorf("bucket %s not found", r.bucket)
}
// Set the cursor to the last key in the bucket
c := b.Cursor()
lastKey, _ := c.Last()
// Iterate over the data in descending order, starting from the last key
for k, v := c.Seek(lastKey); k != nil; k, v = c.Prev() {
results = append(results, v)
// Return if we have collected 50 items
if len(results) >= limit {
break
}
}
return nil
}); err != nil {
return nil, err
}
return results, nil
}
如果我在数据库中使用以下键
test1
、test2,
test3,
test4`,它们似乎总是以随机顺序检索。
有什么方法可以保证 BoltDB 中项目的顺序吗?
我正在保存的数据上有一个
createdAt
时间字段,我想我可能会使用它,但这意味着我必须检索所有项目然后进行排序。
你可以。您的代码中有逻辑错误。您应该使用 c.First() 方法而不是 c.Seek() 或 c.Last() 根据 documentation
来执行此操作