我将字典列表存储在mongodb数据库中。
每隔一个小时,我就会得到带有新字典值的list with list,一些字典可能与先前插入的字典相同。
所以我只想在列表中插入不同字典,并在mongo中更新列表。
插入1
res = [{"a": 1},{"b": 2},{"c": 4},{"d": 5},{"e": 6}]
插入2
res = [{"f": 7},{"b": 2},{"c": 4},{"g": 8},{"h": 9}]
在第二次插入期间,我将获取res
并附加新的res
。但是在追加的时候,我想在列表中处理不同的字典。
除了逐个检查列表中的所有值之外,有没有什么python函数可以解决这个问题?
或者以任何方式让mongodb自己处理这件事。
发布于 2015-06-16 23:35:54
作为此任务的python配方,您可以使用set
作为字典项(元组)的容器,以保留唯一元素,然后再次转换为dict:
res1 = [{"a": 1},{"b": 2},{"c": 4},{"d": 5},{"e": 6}]
res2 = [{"f": 7},{"b": 2},{"c": 4},{"g": 8},{"h": 9}]
>>> [{i:j} for i,j in {next(i.iteritems()) for i in res1+res2}]
[{'a': 1}, {'b': 2}, {'e': 6}, {'f': 7}, {'h': 9}, {'c': 4}, {'g': 8}, {'d': 5}]
发布于 2015-06-16 23:23:10
upsert应该能做你想做的事:
for key in res.keys():
db.collection.update(
{username:key},
{$set:{'value':res[key]}},
{upsert: true}
)
或者,使用集在python中执行此操作。
发布于 2015-06-16 23:27:49
我相信您正在寻找MongoDB中的$addToSet运算符:
http://docs.mongodb.org/manual/reference/operator/update/addToSet
https://stackoverflow.com/questions/30871623
复制相似问题