Add prefix listing in mongodb_store.go (#6777)
This commit is contained in:
@@ -6,6 +6,7 @@ import (
|
|||||||
"crypto/x509"
|
"crypto/x509"
|
||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
|
"regexp"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/seaweedfs/seaweedfs/weed/filer"
|
"github.com/seaweedfs/seaweedfs/weed/filer"
|
||||||
@@ -229,16 +230,20 @@ func (store *MongodbStore) DeleteFolderChildren(ctx context.Context, fullpath ut
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (store *MongodbStore) ListDirectoryPrefixedEntries(ctx context.Context, dirPath util.FullPath, startFileName string, includeStartFile bool, limit int64, prefix string, eachEntryFunc filer.ListEachEntryFunc) (lastFileName string, err error) {
|
func (store *MongodbStore) ListDirectoryPrefixedEntries(ctx context.Context, dirPath util.FullPath, startFileName string, includeStartFile bool, limit int64, prefix string, eachEntryFunc filer.ListEachEntryFunc) (lastFileName string, err error) {
|
||||||
return lastFileName, filer.ErrUnsupportedListDirectoryPrefixed
|
where := bson.M{
|
||||||
}
|
"directory": string(dirPath),
|
||||||
|
|
||||||
func (store *MongodbStore) ListDirectoryEntries(ctx context.Context, dirPath util.FullPath, startFileName string, includeStartFile bool, limit int64, eachEntryFunc filer.ListEachEntryFunc) (lastFileName string, err error) {
|
|
||||||
var where = bson.M{"directory": string(dirPath), "name": bson.M{"$gt": startFileName}}
|
|
||||||
if includeStartFile {
|
|
||||||
where["name"] = bson.M{
|
|
||||||
"$gte": startFileName,
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if len(prefix) > 0 {
|
||||||
|
where["name"].(bson.M)["$regex"] = "^" + regexp.QuoteMeta(prefix)
|
||||||
|
}
|
||||||
|
|
||||||
|
if includeStartFile {
|
||||||
|
where["name"].(bson.M)["$gte"] = startFileName
|
||||||
|
} else {
|
||||||
|
where["name"].(bson.M)["$gt"] = startFileName
|
||||||
|
}
|
||||||
|
|
||||||
optLimit := int64(limit)
|
optLimit := int64(limit)
|
||||||
opts := &options.FindOptions{Limit: &optLimit, Sort: bson.M{"name": 1}}
|
opts := &options.FindOptions{Limit: &optLimit, Sort: bson.M{"name": 1}}
|
||||||
cur, err := store.connect.Database(store.database).Collection(store.collectionName).Find(ctx, where, opts)
|
cur, err := store.connect.Database(store.database).Collection(store.collectionName).Find(ctx, where, opts)
|
||||||
@@ -276,6 +281,10 @@ func (store *MongodbStore) ListDirectoryEntries(ctx context.Context, dirPath uti
|
|||||||
return lastFileName, err
|
return lastFileName, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (store *MongodbStore) ListDirectoryEntries(ctx context.Context, dirPath util.FullPath, startFileName string, includeStartFile bool, limit int64, eachEntryFunc filer.ListEachEntryFunc) (lastFileName string, err error) {
|
||||||
|
return store.ListDirectoryPrefixedEntries(ctx, dirPath, startFileName, includeStartFile, limit, "", eachEntryFunc)
|
||||||
|
}
|
||||||
|
|
||||||
func (store *MongodbStore) Shutdown() {
|
func (store *MongodbStore) Shutdown() {
|
||||||
ctx, _ := context.WithTimeout(context.Background(), 10*time.Second)
|
ctx, _ := context.WithTimeout(context.Background(), 10*time.Second)
|
||||||
store.connect.Disconnect(ctx)
|
store.connect.Disconnect(ctx)
|
||||||
|
|||||||
Reference in New Issue
Block a user