Mongoose метод findOne извлекает действительный документ с отсутствующим _id

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

{ [CastError: Cast to ObjectId failed for value "[object Object]" at path "_id"]
 message: 'Cast to ObjectId failed for value "[object Object]" at path "_id"',
 name: 'CastError',
 type: 'ObjectId',
 value: 
   { from_node_id: 52e10f6acce9daa7f3bf3162,
     target_id: 'a' },
 path: '_id' }

У меня есть простое определение схемы:

var mongoose = require('mongoose'),
Schema = mongoose.Schema;

var transitionProbabilitySchema;
transitionProbabilitySchema = new Schema({
   _id: {
       from_node_id: {type: Schema.Types.ObjectId, ref: "Zone"}
   },
   value: {
       total_transition_count: Number,
       probabilities: [
           {to_node_id: {type: Schema.Types.ObjectId, ref: "Zone"}},
           {probability: Number}
       ]}
}, {collection: 'transitionProbability'});

module.exports = mongoose.model('transitionProbability', transitionProbabilitySchema);

и когда я сейчас позвоню

TransitionProbability.findOne({"_id.from_node_id": from_node_id},
        function (err, tp) {
            if (err) {
                handleError('error - tp not found', err, callback);
            } else {
                 // some modification of tp and then save
            }
        }

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

PS: обратите внимание, что from_node_id извлекается из другого запроса и является действительным ObjectId,

Есть идеи? Заранее спасибо за помощь!

Редактировать: установка поля _id вручную тоже не работает. Еще интереснее: пробуя другие методы, я понял, что findOneAndUpdateнапример, останавливает все приложение node.js без какого-либо журнала. Это просто не продолжается.

1 ответ

Решение

Изменить: Для вашей информации: после поиска в течение двух дней подряд, не найдя ответа, я создал билет на возможную ошибку в Mongoose.js Github, и они подтвердили мою проблему. Согласно им, это исправлено в новой версии 4.0.0, которая не рекомендуется для продуктивного использования. На самом деле решил мою проблему, но rc1 сделал еще больше проблем.


Мое решение до сих пор:

Наконец, я был настолько раздражен этой ошибкой, что изменил всю совокупность этой таблицы так, что _id не имеет отдельного from_node_id поле. Я использую from_node_id сейчас как идентификатор напрямую.

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