Mongoose findOneAndUpdate приведение к ошибке с пользовательским _id - PullRequest
0 голосов
/ 12 ноября 2018

У меня есть моя личная схема, подобная этой:

const schema = new mongoose.Schema({
    _id: Number,
    name: String,
    birthday: Date,
    sex: String
});

schema.pre('findOneAndUpdate', async function (next) {
    try {
        let counter = await Counters.findByIdAndUpdate('person',
            {
                $inc: {
                    value: 1
                }
            },
            { new: true}
        );

        this._update._id = counter.value;

        next();
    }
    catch (err) {
        next(err);
    }
});

Проблема в том, что когда я пытаюсь добавить несколько новых людей с findOneAndUpdate и upsert: true, она генерирует CastError: Cast to ObjectId failed for value "18" at path "person".

Мой _id определен как Number, поэтому я не понимаю, почему он пытается привести его к ObjectId?

Обновление:

Я обнаружил, что моя проблема связана с моделью Person в другой модели, но я забыл изменить тип ссылки в другой модели ...

person: {
    type: Number, //HERE
    ref: 'person',
    required: true
}

Ответы [ 2 ]

0 голосов
/ 12 ноября 2018

_id - автоматически сгенерированное свойство для MongoDB. Если вы хотите добавить, попробуйте другое имя для атрибута Id, например, «personId», или вы можете использовать автоматически сгенерированный Id с помощью MongoDB без создания отдельного Id.

0 голосов
/ 12 ноября 2018

Вы можете изменить тип свойства _id, хотя это не очень хороший подход, но на самом деле вы не можете изменить значение, так как оно неизменное и представляет первичное ключ документа.Имейте в виду, что _id очень важно для жизненного цикла MongoDB, например, для индексации.Если вы хотите изменить ключ Entity , вы можете создать другое свойство, например, person_id.

...