Mongoose - 不允许文档具有相同的数组

时间:2016-12-17 16:30:04

标签: node.js mongodb mongoose

我想创建一个数据库模式,其中文档的数组不能与另一个文档的数组相同。所以,假设我有架构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

1 个答案:

答案 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
        }]
    }
});

现在没有更好的主意。