我在mongodb数据库中存储字典列表。
我每小时都会获得带有新词典值的列表,但某些词典可能与之前插入的相同。
所以我想在列表中只插入不同的词典,并在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自己处理这件事。
答案 0 :(得分:2)
作为此任务的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}]
答案 1 :(得分:1)
upsert应该做你想要的事情:
for key in res.keys():
db.collection.update(
{username:key},
{$set:{'value':res[key]}},
{upsert: true}
)
或者,使用sets在python中执行。
答案 2 :(得分:1)
我相信您正在寻找MongoDB中的$ addToSet运算符:
http://docs.mongodb.org/manual/reference/operator/update/addToSet