我有一个事件集合,我正在查找特定事件的类别,然后我使用$ push语句更新我的其他集合.问题是,当两个事件具有相同的类别时,它将创建一个我不想要的副本.
我知道有关upserts但我不确定它们是否是关于此的最佳方式?当涉及到如何实际编写一个与"$ push"-statement一起使用的upsert时,我有点困惑.
这就是我的更新现在的样子:
self.users.update({"user_id": event['userid']}, {'$push': {'campaigns': UserCampaign}})
Run Code Online (Sandbox Code Playgroud)
..哪里:
UserCampaign = {
"id": campaign['id'],
"name": campaign['name']
}
Run Code Online (Sandbox Code Playgroud)
"UserCampaign"会不时地填充相同的信息,因为我的收藏可能会非常庞大,我想尽可能高效地完成这项工作.
TLDR; 我想更新使用"推送"找到的文档中的数组,而不会有重复的风险.
Ms0*_*s01 11
找到了一个更好的答案我的问题:
通过使用$ addToSet,它没有创建重复项(我还确保通过将所有字典添加到列表中来确保之前没有重复):
self.users.update({"user_id": event['userid']}, {'$addToSet': {'campaigns': UserCampaigns[i]}})
Run Code Online (Sandbox Code Playgroud)
如果我刚使用$ push,它将始终在users集合中的"campaign"中创建重复元素.这种情况发生在有和没有upsert.
出于某种原因,$ each不起作用但不是必需的,我猜PyMongo会为我处理这个问题.
根据MongoDB Docs和PyMongo Docs,将您的更新的第三个参数发送为true .
self.users.update({"user_id": event['userid']}, {'$push': {'campaigns': UserCampaign}}, True)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
7951 次 |
最近记录: |