【发布时间】:2018-05-03 10:54:20
【问题描述】:
我得到了这两个模式:
const Account = mongoose.model('Account', new Schema({
name: {type: String, default: '', required: true},
email: {type: String, default: '', unique: true, required: true},
hashed_password: {type: String, default: '', select: false, required: true},
role: {type: mongoose.Schema.Types.ObjectId, ref: 'Role', required: true},
organisations: [{type: mongoose.Schema.Types.ObjectId, ref: 'Organisation'}],
updatedAt: {type: Date, default: null},
createdAt: {type: Date, default: new Date(), required: true}
}));
const Organisation = mongoose.model('Organisation', new Schema({
name: {type: String, default: '', required: true, unique: true},
email: {type: String, default: '', required: true},
accounts: {type: [{type: mongoose.Schema.Types.ObjectId, ref: 'Account'}], required: true, default: []},
declinedInvites: {type: [{type: mongoose.Schema.Types.ObjectId, ref: 'Account'}], default: []},
admins: {type: [{type: mongoose.Schema.Types.ObjectId, ref: 'Account'}], required: true, default: []},
updatedAt: {type: Date, default: null},
updatedBy: {type: mongoose.Schema.Types.ObjectId, ref: 'Account', default: null},
createdAt: {type: Date, default: new Date(), required: true},
createdBy: {type: mongoose.Schema.Types.ObjectId, ref: 'Account', default: null, required: true}
}));
如果我将一个 Organisation 保存到数据库中,然后尝试使用此路由保存另一个:
router.post('/organisations', auth.verifyToken, (req, res, next) => {
const creator = req.decoded._doc._id;
const organisation = new Organisation({
name: req.body.name,
email: req.body.email,
accounts: [creator],
declinedInvites: [],
admins: [creator],
createdBy: creator
});
organisation.save((err, organisation) => {
if (err) {
return next(err);
}
});
});
它会抛出如下错误:
MongoError: E11000 duplicate key error collection: docs.organisations index: accounts_1 dup key: { : ObjectId('5a0d89e89141e410a9617746') }
空数组declinedInvites也是如此,它会抛出一个错误说同样的事情但是:
MongoError: E11000 duplicate key error collection: docs.organisations index: declinedInvites_1 dup key: { : undefined }
我不明白这里发生了什么,为什么当我在架构中没有设置 unique 键时它会引发重复键错误?
【问题讨论】:
-
嗨,我认为这应该解决你的问题click here
-
你能显示
docs.organisations索引吗? -
@GrégoryNEUT 就是这样,我不知道它会这样工作.. 这真的很烦人。感谢您的回答。
-
@Chrillewoodz 说句公道话,在看到你有趣的问题之前我并不知道它:D
标签: javascript node.js mongodb mongoose