From: bravof Date: Fri, 15 Jan 2021 14:54:45 +0000 (-0300) Subject: feat(dbmongo): upsert option for set_one X-Git-Tag: branch-sol006v331-start~2 X-Git-Url: https://osm.etsi.org/gitweb/?a=commitdiff_plain;h=refs%2Fchanges%2F98%2F10198%2F3;p=osm%2Fcommon.git feat(dbmongo): upsert option for set_one Change-Id: I3dd38738e7ef8c1b70df7742d08eb8f8d52529e1 Signed-off-by: bravof --- diff --git a/osm_common/dbmongo.py b/osm_common/dbmongo.py index 56f387b..7fc29dc 100644 --- a/osm_common/dbmongo.py +++ b/osm_common/dbmongo.py @@ -363,13 +363,13 @@ class DbMongo(DbBase): raise DbException(e) def set_one(self, table, q_filter, update_dict, fail_on_empty=True, unset=None, pull=None, push=None, - push_list=None, pull_list=None): + push_list=None, pull_list=None, upsert=False): """ Modifies an entry at database :param table: collection or table :param q_filter: Filter :param update_dict: Plain dictionary with the content to be updated. It is a dot separated keys and a value - :param fail_on_empty: If nothing matches filter it returns None unless this flag is set tu True, in which case + :param fail_on_empty: If nothing matches filter it returns None unless this flag is set to True, in which case it raises a DbException :param unset: Plain dictionary with the content to be removed if exist. It is a dot separated keys, value is ignored. If not exist, it is ignored @@ -380,6 +380,8 @@ class DbMongo(DbBase): is appended to the end of the array :param push_list: Same as push but values are arrays where each item is and appended instead of appending the whole array + :param upsert: If this parameter is set to True and no document is found using 'q_filter' it will be created. + By default this is false. :return: Dict with the number of entries modified. None if no matching is found. """ try: @@ -399,7 +401,7 @@ class DbMongo(DbBase): with self.lock: collection = self.db[table] - rows = collection.update_one(self._format_filter(q_filter), db_oper) + rows = collection.update_one(self._format_filter(q_filter), db_oper, upsert=upsert) if rows.matched_count == 0: if fail_on_empty: raise DbException("Not found any {} with filter='{}'".format(table[:-1], q_filter),