使用 mongo 语法更新本地 python 字典,不使用 mongo

Update a local python dictionary using mongo syntax, without mongo

我有一个使用 mongo 的代码库。我想在持久性代码被调用的地方和实际的 mongo 数据库之间添加一个缓存层,主要是为了我可以使用 readPreference=secondaryPreferred 而不会破坏我的应用程序的其余部分(这取决于某种程度的强读后写一致性)。

有没有办法让我使用可能嵌套的字典并应用 mongodb 更新语法,而不必使用 mongo 本身?

例如,我可能有这样的代码:

cache = {}

def _add_to_cache(key, doc):
  cache['key'] = doc


def _update_cache(key, update):
  cache['key'] = not_mongo_lib.apply_update(cache['key'], update)

_add_to_cache('foo', {'a': {'b': 1}})
_update_cache('foo', {'$set': {'a.b': 2}})
print(cache['foo'])  # {'a': {'b': 2}}

换句话说,是否有在 mongo 之外利用 mongodb 更新语法的库或实现?

感谢@rickhg12hs 将我指向 mongomock。因为我的目标是实现一个 TTL 缓存层,所以我最终只是直接使用带有 TLL 索引的 mongomock。类似于:

import mongomock

cache = mongomock.MongoClient().db.cache
cache.create_index([(CACHE_FIELD, 1)], expireAfterSeconds=10)

cache.insert_one(doc)
cache.find(query)

我最终不需要直接更新缓存——相反,我删除并重新插入:

def do_update(query, update):
  updated = realmongo.find_one_and_update(query, update, pymongo.AFTER)
  cache.remove(query)
  cache.insert(update)
  return updated