53 lines
1.3 KiB
Go
53 lines
1.3 KiB
Go
|
package document
|
|||
|
|
|||
|
import (
|
|||
|
"fmt"
|
|||
|
|
|||
|
"go.mongodb.org/mongo-driver/bson"
|
|||
|
"git.pyer.club/kingecg/godocdb/storage"
|
|||
|
)
|
|||
|
|
|||
|
// DocumentStore 管理文档的存储和检索
|
|||
|
type DocumentStore struct {
|
|||
|
storage *storage.LevelDBStorage
|
|||
|
}
|
|||
|
|
|||
|
// NewDocumentStore 创建新的文档存储实例
|
|||
|
func NewDocumentStore(path string) (*DocumentStore, error) {
|
|||
|
storage, err := storage.NewLevelDBStorage(path)
|
|||
|
if err != nil {
|
|||
|
return nil, err
|
|||
|
}
|
|||
|
return &DocumentStore{storage: storage}, nil
|
|||
|
}
|
|||
|
|
|||
|
// StoreDocument 存储文档
|
|||
|
func (ds *DocumentStore) StoreDocument(id string, doc interface{}) error {
|
|||
|
// 使用BSON序列化文档
|
|||
|
data, err := bson.Marshal(doc)
|
|||
|
if err != nil {
|
|||
|
return fmt.Errorf("failed to marshal document: %v", err)
|
|||
|
}
|
|||
|
|
|||
|
// 存储文档(格式: collection:id → BSON数据)
|
|||
|
key := []byte(fmt.Sprintf("documents:%s", id))
|
|||
|
return ds.storage.Put(key, data)
|
|||
|
}
|
|||
|
|
|||
|
// GetDocument 获取文档
|
|||
|
func (ds *DocumentStore) GetDocument(id string, result interface{}) error {
|
|||
|
key := []byte(fmt.Sprintf("documents:%s", id))
|
|||
|
data, err := ds.storage.Get(key)
|
|||
|
if err != nil {
|
|||
|
return fmt.Errorf("document not found: %v", err)
|
|||
|
}
|
|||
|
|
|||
|
// 使用BSON反序列化文档
|
|||
|
return bson.Unmarshal(data, result)
|
|||
|
}
|
|||
|
|
|||
|
// DeleteDocument 删除文档
|
|||
|
func (ds *DocumentStore) DeleteDocument(id string) error {
|
|||
|
key := []byte(fmt.Sprintf("documents:%s", id))
|
|||
|
return ds.storage.Delete(key)
|
|||
|
}
|