gpt4 book ai didi

python - Flask+MongoEngine : Set MongoEngine Document Field as Unique in pre existing Document

转载 作者:太空宇宙 更新时间:2023-11-03 17:54:30 31 4
gpt4 key购买 nike

我有一个使用 Flask+MongoEngine 创建的应用程序,并且有一个像这样的“用户文档”:

class User(db.Document):
username = db.StringField(max_length=MAX_USERNAME_CHARS)
name = db.StringField(max_length=70)
#[...]
email = db.EmailField(max_length=50, required=True)
#[...]
meta = {
'indexes': ['-created_at', 'email'],
'ordering': ['-created_at']
}
#[...]

到目前为止,我一直在 Controller 中检查“用户名”和“电子邮件”是否重复,但在 mongo 中,某些用户仍然有这些重复字段,现在我想设置此字段(“用户名”和“电子邮件” ") 必须是唯一的、不可为空且必需的。

我正在搜索文档,现在我知道我可以用这个声明来做到这一点:

email = db.EmailField(max_length=50, required=True, unique=True)

但是如果文档之前创建过,MongoEngine 就不会再次设置它。

所以,我从现在开始正在寻找一种方法(一旦解决了重复的问题)就不会再次出现重复的字段。

该应用程序正在生产中,有很多用户注册。我可以使用 mongo 控制台来设置一些索引或一些索引。

最佳答案

首先,在尝试任何操作之前,执行完整的数据库备份!

您将需要在电子邮件字段上创建唯一索引以强制其唯一性。如果没有重复的邮件,则查询成功。如果数据库中已存在重复的电子邮件地址,您将收到错误消息(不应出现这种情况)。

进入mongo控制台并创建索引:

db.YOUR_COLLECTION.ensureIndex({ email: 1 }, { unique: true })

这会在 email 字段上创建一个升序索引(因此 1; -1 将表示降序索引)。这使得搜索和排序电子邮件变得更快。它还使其独一无二(这就是您的实际目标!),因此尝试插入包含现有电子邮件的文档的查询将会失败。

参见this article请访问 MongoDB 官方网站了解更多详细信息。

关于python - Flask+MongoEngine : Set MongoEngine Document Field as Unique in pre existing Document,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28676691/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com