aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Lu <chris.lu@gmail.com>2021-06-06 13:12:01 -0700
committerChris Lu <chris.lu@gmail.com>2021-06-06 13:12:01 -0700
commit21ad9a4ac29fad0794369cc05d1f29fa91340c34 (patch)
tree49b6376a1ac28969a010ae14f381495c62177e39
parente6ba2f9c372f8f160003dac63d51b6dde0a512de (diff)
downloadseaweedfs-21ad9a4ac29fad0794369cc05d1f29fa91340c34.tar.xz
seaweedfs-21ad9a4ac29fad0794369cc05d1f29fa91340c34.zip
filer: mongodb avoids E11000 duplicate key error collection: seaweedfs.filemeta index: directory_1_name_1 dup key
-rw-r--r--weed/filer/mongodb/mongodb_store_kv.go11
1 files changed, 6 insertions, 5 deletions
diff --git a/weed/filer/mongodb/mongodb_store_kv.go b/weed/filer/mongodb/mongodb_store_kv.go
index 4aa9c3a33..59b8f1d93 100644
--- a/weed/filer/mongodb/mongodb_store_kv.go
+++ b/weed/filer/mongodb/mongodb_store_kv.go
@@ -7,6 +7,7 @@ import (
"github.com/chrislusf/seaweedfs/weed/glog"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/mongo"
+ "go.mongodb.org/mongo-driver/mongo/options"
)
func (store *MongodbStore) KvPut(ctx context.Context, key []byte, value []byte) (err error) {
@@ -15,11 +16,11 @@ func (store *MongodbStore) KvPut(ctx context.Context, key []byte, value []byte)
c := store.connect.Database(store.database).Collection(store.collectionName)
- _, err = c.InsertOne(ctx, Model{
- Directory: dir,
- Name: name,
- Meta: value,
- })
+ opts := options.Update().SetUpsert(true)
+ filter := bson.D{{"directory", dir}, {"name", name}}
+ update := bson.D{{"$set", bson.D{{"meta", value}}}}
+
+ _, err = c.UpdateOne(ctx, filter, update, opts)
if err != nil {
return fmt.Errorf("kv put: %v", err)