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

我知道upsert,但是我不确定它们是否是解决此问题的最佳方法?对于如何实际编写与“$ push”语句一起使用的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的情况下。

由于某些原因,每个都无效,但不是必需的,我想PyMongo会替我解决这个问题。

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

10-12 16:56
查看更多