python - 如果元素不存在(无重复),则将元素推送到数组

标签 python mongodb

我有一个事件集合,我将通过它查找特定事件的类别,然后使用 $push 语句更新我的其他集合。问题是当两个事件具有相同的类别时,它会创建一个重复,这是我不想要的。

我知道 upserts,但我不确定它们是否是解决此问题的最佳方式?当谈到如何实际编写一个与“$push”-statement 一起使用的 upsert 时,我有点困惑。

这就是我的更新现在的样子:

self.users.update({"user_id": event['userid']}, {'$push': {'campaigns': UserCampaign}})

..哪里:

UserCampaign = {
        "id": campaign['id'],
        "name": campaign['name']
}

“UserCampaign”不时会被相同的信息填满,由于我的收藏可能非常庞大,我希望尽可能高效地完成这项工作。

TLDR;我想更新使用“推送”找到的文档中的数组,而不会有重复的风险。

最佳答案

为我的问题找到了更好的答案:

通过使用 $addToSet 它不会创建重复项(我还通过将所有字典添加到列表中来确保之前没有重复项):

self.users.update({"user_id": event['userid']}, {'$addToSet': {'campaigns': UserCampaigns[i]}})

如果我刚刚使用 $push,它总是会在 users 集合中的“campaigns”中创建重复的元素。无论是否使用 upsert,都会发生这种情况。

由于某种原因,$each 不起作用但不是必需的,我猜 PyMongo 会为我解决这个问题。

关于python - 如果元素不存在(无重复),则将元素推送到数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11016767/

相关文章:

node.js - 将数组与包含对象的集合数组进行比较

python - 以迭代的方式不断添加矩阵

javascript - meteor ,mongodb 中正则表达式的问题

javascript - 使用 Angular.js 中的 post 不起作用

node.js - 处理 token 的架构 (NodeJS) (MongoDB)

node.js - 使用 Mongoskin(node.js 和 mongodb)进行更新

python - 遇到问题 - 类 'pandas.core.indexing._AtIndexer'

python - 从 Pandas 数据框中过滤掉冗余的重复数据

python - 为扭曲的记录器注册多个观察者

python - 带有列表列的 pandas 时间序列数据框