我想创建一个数据库模式,其中文档的数组不能与另一个文档的数组相同。所以,假设我有架构conversations
:
var ConversationSchema = new Schema({
name: String,
participants: {
type: [{
type: Schema.Types.ObjectId,
ref: 'User'
}]
}
});
现在如果我与同一个参与者创建两个对话,我怎样才能验证这个,以便第二个会失败,但第三个不会?
var conversation1 = new Conversation({
name: "Hello",
participants: ['12345', '09876']
});
var conversation2 = new Conversation({
name: "World",
participants: ['12345', '09876']
});
var conversation3 = new Conversation({
name: "Group chat",
participants: ['12345', '09876', '13579']
});
conversation1.save(); // Valid
conversation2.save(); // Invalid - conversation already exists
conversation3.save(); // Valid
答案 0 :(得分:1)
我想您可以在保存数据之前使用一些自定义 Mongoose 验证。
但是这并不是一个真正的架构,正如凯文在评论中所说的那样,因为你需要进行数据库查询来比较现有阵列和新阵列。
这样的事情(未经测试):
function checkArray(arr) {
// here make a call to the db to compare existing array with arr
}
var ConversationSchema = new Schema({
name: String,
participants: {
type: [{
type: Schema.Types.ObjectId,
ref: 'User',
validate: checkArray
}]
}
});
现在没有更好的主意。