所以我正在使用 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/