Files
crawlab/db/mongo/result.go
2024-10-22 16:22:35 +08:00

73 lines
1.3 KiB
Go

package mongo
import (
"context"
"errors"
"go.mongodb.org/mongo-driver/mongo"
)
type FindResultInterface interface {
One(val interface{}) (err error)
All(val interface{}) (err error)
GetCol() (col *Col)
GetSingleResult() (res *mongo.SingleResult)
GetCursor() (cur *mongo.Cursor)
GetError() (err error)
}
type FindResult struct {
col *Col
res *mongo.SingleResult
cur *mongo.Cursor
err error
}
func (fr *FindResult) GetError() (err error) {
//TODO implement me
panic("implement me")
}
func (fr *FindResult) One(val interface{}) (err error) {
if fr.err != nil {
return fr.err
}
if fr.cur != nil {
if !fr.cur.TryNext(fr.col.ctx) {
return mongo.ErrNoDocuments
}
return fr.cur.Decode(val)
}
return fr.res.Decode(val)
}
func (fr *FindResult) All(val interface{}) (err error) {
if fr.err != nil {
return fr.err
}
var ctx context.Context
if fr.col == nil {
ctx = context.Background()
} else {
ctx = fr.col.ctx
}
if fr.cur == nil {
return errors.New("no cursor")
}
if !fr.cur.TryNext(ctx) {
return ctx.Err()
}
return fr.cur.All(ctx, val)
}
func (fr *FindResult) GetCol() (col *Col) {
return fr.col
}
func (fr *FindResult) GetSingleResult() (res *mongo.SingleResult) {
return fr.res
}
func (fr *FindResult) GetCursor() (cur *mongo.Cursor) {
return fr.cur
}