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
сейчас как идентификатор напрямую.