我有一个使用mongo的代码库。我想在持久化代码被调用和实际mongo数据库之间添加一个缓存层,主要是为了我可以使用readPreference=secondaryPreferred
而不会破坏我的应用程序的其余部分(这取决于某种程度的强读写后一致性)。
是否有一种方法让我采取一个潜在的嵌套字典和应用mongodb更新语法,而不一定使用mongodb本身?
例如,我可能有这样的代码: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}}
换句话说,是否有一个库或实现利用mongodb更新语法之外的mongodb ?
感谢@rickhg12hs为我指向mongomock。因为我的目标是实现一个TTL缓存层,所以我最终只是直接使用mongomock和一个TTL索引。比如:
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