gpt4 book ai didi

javascript - MongoDB - 尽管没有唯一键集,但尝试保存多个文档会导致架构的 ObjectId 出现重复键错误

转载 作者:可可西里 更新时间:2023-11-01 10:48:20 29 4
gpt4 key购买 nike

我得到了这两个模式:

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 键时它会抛出重复键错误?

最佳答案

正如@Grégory NEUT 所指出的,如果您在架构中设置了一个 unique 键然后将其删除,索引仍将存在,将其视为您仍然拥有 unique 键集。

解决方案是使用此命令简单地删除索引:

db.items.dropIndex('some-index-path')

或者在我的例子中,我运行了我的自定义脚本来刷新数据库,这解决了所有可能出现问题的索引,而不是必须为每个索引运行它。

关于javascript - MongoDB - 尽管没有唯一键集,但尝试保存多个文档会导致架构的 ObjectId 出现重复键错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47388324/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com