summaryrefslogtreecommitdiffstats
path: root/src/orchestrator/pkg/infra/db/mongo.go
diff options
context:
space:
mode:
authorRitu Sood <ritu.sood@intel.com>2020-03-05 19:00:02 -0800
committerRitu Sood <ritu.sood@intel.com>2020-03-05 19:04:09 -0800
commitb0d2801effdabd1681a96710284b6fae5a3106fc (patch)
tree40c7f2f66639e17c4b17f026608454f824c160bf /src/orchestrator/pkg/infra/db/mongo.go
parenta2c244896cb87eb8564743af8c463f170869a824 (diff)
Adding Remove function to Mongo
Adding remove function to remove a document only if no child refrences exist. Issue-ID: MULTICLOUD-922 Signed-off-by: Ritu Sood <ritu.sood@intel.com> Change-Id: I7d199502635170a65f7029360c7436ac0389f2a9
Diffstat (limited to 'src/orchestrator/pkg/infra/db/mongo.go')
-rw-r--r--src/orchestrator/pkg/infra/db/mongo.go32
1 files changed, 30 insertions, 2 deletions
diff --git a/src/orchestrator/pkg/infra/db/mongo.go b/src/orchestrator/pkg/infra/db/mongo.go
index 30eb899f..a344aa1c 100644
--- a/src/orchestrator/pkg/infra/db/mongo.go
+++ b/src/orchestrator/pkg/infra/db/mongo.go
@@ -49,6 +49,8 @@ type MongoCollection interface {
opts ...*options.FindOptions) (*mongo.Cursor, error)
UpdateOne(ctx context.Context, filter interface{}, update interface{},
opts ...*options.UpdateOptions) (*mongo.UpdateResult, error)
+ CountDocuments(ctx context.Context, filter interface{},
+ opts ...*options.CountOptions) (int64, error)
}
// MongoStore is an implementation of the db.Store interface
@@ -543,8 +545,8 @@ func (m *MongoStore) Find(coll string, key Key, tag string) ([][]byte, error) {
return result, nil
}
-// Remove method to remove the documet by key
-func (m *MongoStore) Remove(coll string, key Key) error {
+// RemoveAll method to removes all the documet matching key
+func (m *MongoStore) RemoveAll(coll string, key Key) error {
if !m.validateParams(coll, key) {
return pkgerrors.New("Mandatory fields are missing")
}
@@ -560,3 +562,29 @@ func (m *MongoStore) Remove(coll string, key Key) error {
}
return nil
}
+
+// Remove method to remove the documet by key if no child references
+func (m *MongoStore) Remove(coll string, key Key) error {
+ if !m.validateParams(coll, key) {
+ return pkgerrors.New("Mandatory fields are missing")
+ }
+ c := getCollection(coll, m)
+ ctx := context.Background()
+ filter, err := m.findFilter(key)
+ if err != nil {
+ return err
+ }
+ count, err := c.CountDocuments(context.Background(), filter)
+ if err != nil {
+ return pkgerrors.Errorf("Error finding: %s", err.Error())
+ }
+ if count > 1 {
+ return pkgerrors.Errorf("Can't delete parent without deleting child references first")
+ }
+ _, err = c.DeleteOne(ctx, filter)
+ if err != nil {
+ return pkgerrors.Errorf("Error Deleting from database: %s", err.Error())
+ }
+ return nil
+}
+