Не удалось создать уникальный индекс в MongoDB

#javascript #mongodb #mongoose #mongodb-query #mongoose-schema

Вопрос:

 const popupSchema = new mongoose.Schema(
    {
        /**
         * @type schema field / ObjectId
         * @description User whose popus are stored.
         * @note should be required
         */

        user_id: {
            type: mongoose.Schema.Types.ObjectId,
            ref: "User",
            required:true,
            index: { unique: true }
        },
        /**
         * @type schema field / Array
         * @description Information of all the popups of the User.
         */

        popupsArray: [popupDetails]
    },
    opts
);
 

Это моя схема, и я хочу сделать user_id уникальным индексом. В схеме нет другой записи с тем же идентификатором пользователя.
Я запускаю этот сценарий, чтобы добиться того же самого:

 await popups
    .createIndexes(
        {user_id:1}
    )
    .then(res => {
            console.log("done")
        }
    ).catch((err)=>{
        console.log("error in indexing popups",err)
    })

 

Но этот сценарий заканчивается ошибкой =>>
Индекс с именем: user_id_1 уже существует с различными опциями.
{
ок: 0,
код: 85,
кодовое имя: «Indexoptionconflict»
}

Как я могу сделать идентификатор пользователя unique_index? Я также попробовал required:true в user_id, но это не сработает.

Я добавил required:true это непосредственно перед запуском этого сценария. Будет ли это иметь какое-то значение?

Комментарии:

1. Я подозреваю, что индекс уже создан. Что делать с этим в панцире монго db.popup.getIndexes()

2. Я проверил компас, он только _id уникален!

3. Это не гарантирует, что индекс для user_id уже не существует. Проверьте, действительно ли вы можете узнать, существует ли индекс, в этом и заключается ошибка.

4. В любом случае, что бы я изменил в вашем коде, если бы написал его, было бы : let result = await popups .createIndex( {user_id: 1},{unique: true} ); console.log(result);

5. С await вам тогда не понадобится. Также вы можете использовать createIndex здесь вместо createIndexes.