Mongoose/MongoDb,如何针对另一个模型验证ID数组

Mongoose/MongoDb ,how to validate an array of Ids against another model

本文关键字:模型 另一个 验证 ID 数组 何针 MongoDb Mongoose      更新时间:2023-09-26

我有两个moongose架构:

var Schema2 = new Schema({
    creator : { type: String, ref: 'User'},
    schema_name : [{ type: String}],
});
var Schema1 = new Schema({
    creator : { type: String, ref: 'User'},
    schema_ref : [{ type: String, ref: 'Schema2' }],
});

我想知道当我创建一个新的Schema1时,最好的做法是检查数组schema_ref的每个元素都有相同的创建者。

因为schema1元素是由客户端表单添加的,所以我必须检查schema_ref元素是否由发送表单的同一用户所有

您可以尝试使用验证器功能,也可以使用简单的"保存"中间件:

Schema1.pre('save', function(next) {
    let owner;
    for (let entry in this.schema_ref) {
        if (!owner) {
            owner = entry;
        } else {
            if (entry !== owner) {
                return next(new Error("owner mismatch");
            }
        }
    }
});

此外,您的模式可能无法按预期工作,看起来您实际上需要:

schema_ref: [{
    type: {type: String},
    ref: "User"
}]

此外,看看id验证器插件,或者类似的插件——除了验证之外,它还将检查其他(Users)集合中是否真的存在所有类似的ref类型属性。