使用 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
我有一个使用 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