Database design 验证来自客户端应用程序的引用值

Database design 验证来自客户端应用程序的引用值,database-design,mongoose,mongoose-schema,Database Design,Mongoose,Mongoose Schema,我正在使用mongodb,并试图找到一种解决方案,首先为用户创建数据,以便用户在每个界面上只选择和使用一个查询(一个用于用户的选择界面,另一个用于显示所选数据)。我想到的是创建两个集合:一个用于可选择的数据,另一个用于存储选定的数据。让我们以国家和城市为例。我有一个国家/地区的收藏,类似于: { name: { type: String }, cities: [{ name: { type: String } }] } 我们将使用此集合输入国家和城市数据

我正在使用mongodb,并试图找到一种解决方案,首先为用户创建数据,以便用户在每个界面上只选择和使用一个查询(一个用于用户的选择界面,另一个用于显示所选数据)。我想到的是创建两个集合:一个用于可选择的数据,另一个用于存储选定的数据。让我们以国家和城市为例。我有一个国家/地区的收藏,类似于:

{
    name: { type: String },
    cities: [{
        name: { type: String }
    }]
}
我们将使用此集合输入国家和城市数据。当用户创建配置文件时,他/她将能够使用选择框仅选择这些值。然后它将保存在另一个集合中:

{
    name: { type: String },
    surname: { type: String },
    addresses: [{
        country: { type: String },
        city: { type: String },
        description { type: String }
    }]
}
现在我想到的问题是,我如何确保恶意用户不能发送不同的国家或城市名称并使数据不一致。我希望能够用用户的地址数据更新国家和城市名称。我还想知道这是一种正确的方式还是一种反模式?

使用枚举

我知道enum,但它不是一个解决方案。如果超级用户想要添加一个新的国家和一组城市,该怎么办?它应该存储在数据库中,对吗?但是怎么做呢?正确的做法是什么@圣地亚哥昆特罗斯
var cities = ['LA', 'New York', 'Washington', 'Orlando']

var s = new Schema({
    name: { type: String },
    cities: [{
        name: { type: String, enum: cities }
    }]
})


var personSchema = {
    name: { type: String },
    surname: { type: String },
    addresses: [{
        country: { type: String },
        city: { type: String, enum: cities },
        description { type: String }
    }]
}