python - MongoDB、MongoEngine : unique list items

标签 python mongodb flask mongoengine

所以我正在使用 Flask 和 Mongoengine 制作一个简单的披萨投票应用程序。 这是投票文档类:

class Votes(db.Document):
    # reference to a date the vote started
    vote = db.ReferenceField(VoteArchive)

    # reference to one kind of pizza
    pizza = db.ReferenceField(Pizza)

    # list of references to users that voted for that pizza
    voters = db.ListField(db.ReferenceField(User))

我无法弄清楚如何使“选民”中的引用变得独特。 不是整个字段,而是该列表中不重复的项目,因此一个用户只能为一个披萨投票一次。

目标是禁止一个用户两次为披萨投票。

有什么想法吗?

最佳答案

处理这个问题的最佳方法是使用 MongoDB 的原生功能。您可以使用两个运算符:

1) 使用$nin查询我已经完成的所有投票,如果查询匹配则插入:

updated = Votes.objects(pizza=Spicy, 
                        vote=FiveStar, 
                        nin__voters=Rozza).update(push__voters=Rozza)

2) 使用$addToSet仅当该值不在数组中时才将值添加到数组中。我们还可以在此处添加 upsert 标志,如果对象不存在,我们将插入:

updated = Votes.objects(pizza=Spicy, 
                        vote=FiveStar, 
                        upsert=True).update(addToSet__voters=Rozza)

关于python - MongoDB、MongoEngine : unique list items,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17922046/

相关文章:

java - 使用聚合读取时,Mongodb java 驱动程序会自动将日期转换为本地计算机时区

mongodb show dbs listDatabases 失败

Python Flask 错误 "missing required positional arguments"(即使已提供)

python - Flask - 用数组填充 SelectField 选择

python - Python递归期间的变量范围错误

node.js - 将mongodb集合数据导出到 Node js中的csv文件

python - 强制 genfromtxt 输出为无向量

python - 如何使用 Ajax 将表中的数据发布到 Flask View ?

python - 如何从 PDF 文件中提取文本和文本坐标?

python - 在pygame中绘制表面透明度?