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将同时使用集合名称(角色)。如果是这种情况,则需要显式设置模型