Невозможно создать документы с одним и тем же идентификатором объекта в разных массивах из-за «ошибки дублирования ключа»

Я пытаюсь создать новый Group с массивом идентификаторов пользователей, но получаю сообщение об ошибке E11000 duplicate key error index: bullet-time.groups.$users_1 dup key.

Я могу создать первую группу штрафов и получить следующий объект:

{
  "_id": "5acddf7a599e250f79cebc21",
  "users": [
    ObjectId("5ac4ab6e951bb2153ca2749e")
  ]
}

Но при попытке создать новую группу с тем же пользовательским ObjectId я получаю вышеупомянутую ошибку.

Моя групповая модель проста:

const GroupSchema = new Schema({
    users: [{ type : mongoose.Schema.Types.ObjectId, ref: 'User' }],
});

И после создания я просто создаю новую группу, помещаю пользовательский ObjectId в массив пользователей и вызываю save следующим образом:

async create(user_id){
    try {
        const newGroup = new GroupModel()
        newGroup.users.push(user_id)
        return await newGroup.save()
    }catch (err) {
        return err
    }
}

Я не вижу причин, по которым 1 пользователь не может быть в нескольких группах.

Насколько я понимаю, в моих моделях нет флагов unique или dedup.

РЕДАКТИРОВАТЬ:

Если я изменю свою модель, чтобы принимать пользователей в виде массива строк, а не ObjectId, например, users: [{ type : String, ref: 'User' }],, тогда я не получаю ошибку дублирования

0
0
22
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я сбросил свои коллекции Groups, и, похоже, это решило проблему.

Я поигрался с созданием уникального массива пользователей, пытаясь убедиться, что в массиве нет повторяющихся идентификаторов. Очевидно, это был неправильный способ сделать это, и когда он создал коллекцию Groups, он, очевидно, сохранил этот уникальный атрибут.

Для меня это новость, поэтому, надеюсь, это поможет любому, у кого есть подобная проблема.

Другие вопросы по теме