Node.js insertMany上的mongoose重复密钥错误
我正在尝试设置我的测试数据库,插入多个角色项Node.js insertMany上的mongoose重复密钥错误,node.js,mongoose,Node.js,Mongoose,我正在尝试设置我的测试数据库,插入多个角色项 ... // ADD 3 roles in first group const roleA1 = { _groupId: groups[0]._id, name: 'admin', description: 'can RW group, user', users: [], permissions: permissions1 }; const roleA2 = { _groupId: groups[0]._id, name: 'manage
...
// ADD 3 roles in first group
const roleA1 = { _groupId: groups[0]._id, name: 'admin', description: 'can RW group, user', users: [], permissions: permissions1 };
const roleA2 = { _groupId: groups[0]._id, name: 'manager', description: 'can R group, can RW user', users: [], permissions: permissions2 };
const roleA3 = { _groupId: groups[0]._id, name: 'employee', description: 'can R group, can read user', users: [], permissions: permissions3 };
// ADD 2 roles in second group
const roleB2 = { _groupId: groups[1]._id, name: 'manager', description: 'can R group, can RW user', users: [], permissions: permissions2 };
const roleB3 = { _groupId: groups[1]._id, name: 'employee', description: 'can R group, can read user', users: [], permissions: permissions3 };
// ADD 1 role in third group
const roleC3 = { _groupId: groups[2]._id, name: 'employee', description: 'can R group, can read user', users: [], permissions: permissions3 };
// ADD 1 role wo any group
const role4 = { name: 'visitor', description: 'no permissions', users: [], permissions: [] };
return Role.insertMany([roleA1, roleA2, roleA3, roleB2, roleB3, roleC3, role4 ])
.then((insertedRoles) => {
console.log('Successfully created test roles in groups');
return insertedRoles;
})
.catch((e) => {
console.log('Error inserting many: %j', e);
return e;
});
我在roleB2上找到了一把复制的钥匙。(名称为“经理”)。。。但是名称字段在角色模型中没有定义为唯一的
/**
* Role Schema
*/
const RoleSchema = new Schema({
_groupId: { type: ObjectId, ref: 'Group'},
name: { type: String, required: true },
description: { type: String, trim: true, },
users: [{ type: ObjectId }, { _id: false }],
permissions: [PermissionSchema]
});
没有要设置的新标记??怎么了
谢谢你的反馈
更新
mongoose调试的奇怪输出。。。角色数重复
groups[0]._id: 5954ee4d3b4027368ba66855
groups[0]._id: 5954ee4d3b4027368ba66856
groups[0]._id: 5954ee4d3b4027368ba66857
Mongoose: roles.count({ '$and': [ { _groupId: ObjectId("5954ee4d3b4027368ba66855") }, { name: 'admin' } ] }, {})
Mongoose: roles.count({ '$and': [ { _groupId: ObjectId("5954ee4d3b4027368ba66855") }, { name: 'admin' } ] }, {})
Mongoose: roles.count({ '$and': [ { _groupId: ObjectId("5954ee4d3b4027368ba66855") }, { name: 'manager' } ] }, {})
Mongoose: roles.count({ '$and': [ { _groupId: ObjectId("5954ee4d3b4027368ba66855") }, { name: 'manager' } ] }, {})
Mongoose: roles.count({ '$and': [ { _groupId: ObjectId("5954ee4d3b4027368ba66855") }, { name: 'employee' } ] }, {})
Mongoose: roles.count({ '$and': [ { _groupId: ObjectId("5954ee4d3b4027368ba66855") }, { name: 'employee' } ] }, {})
Mongoose: roles.count({ '$and': [ { _groupId: ObjectId("5954ee4d3b4027368ba66856") }, { name: 'manager' } ] }, {})
Mongoose: roles.count({ '$and': [ { _groupId: ObjectId("5954ee4d3b4027368ba66856") }, { name: 'manager' } ] }, {})
Mongoose: roles.count({ '$and': [ { _groupId: ObjectId("5954ee4d3b4027368ba66856") }, { name: 'employee' } ] }, {})
Mongoose: roles.count({ '$and': [ { _groupId: ObjectId("5954ee4d3b4027368ba66856") }, { name: 'employee' } ] }, {})
Mongoose: roles.count({ '$and': [ { _groupId: ObjectId("5954ee4d3b4027368ba66857") }, { name: 'employee' } ] }, {})
Mongoose: roles.count({ '$and': [ { _groupId: ObjectId("5954ee4d3b4027368ba66857") }, { name: 'employee' } ] }, {})
Mongoose: roles.count({ '$and': [ { _groupId: null }, { name: 'visitor' } ] }, {})
不久前我确实遇到过类似的情况,您能否删除这一行
const roleB2={{u groupId:groups[1]。\u id,name:'manager',description:'can R group,can RW user',users:[],permissions:permissions2}
并查看您是否在roleB3
上获得了一个重复的键请注意,在这种情况下,我在B3上获得了一个重复的键…因此,如果您创建多个唯一索引,然后尝试将重复项保存到db,其中唯一的区别是_id,它将失败,我理解,但在我的情况下,有一个区别:_groupId字段不同…这就是我理解错误的原因…您是否有可能使用同一集合的多个模型?例如,如果您有“角色模型”和“角色模型”,mongoose将同时使用集合名称(角色)。如果是这种情况,则需要显式设置模型