Пытаясь заполнить вложенный массив в мангусте, бросается казалось бы не связанный CastError, и я не могу понять, почему
Я новичок в мангусте и пытаюсь провести несколько очень простых экспериментов со ссылками и схемами.
Я пытаюсь создать сущность "установка", которая содержит массив устройств, сгруппированных по типу. Внутри этой группы есть массив идентификаторов отдельных устройств, на которые есть ссылки.
Мои схемы такие:
///INSTALLATIONS.js
var installationSchema = mongoose.Schema({
_id: Number,
devices: [deviceType:String,
ids: {type: [mongoose.Schema.Types.ObjectId], ref: 'device'}}]
})
export const model = mongoose.model("installation", installationSchema);
///DEVICES
var deviceSchema = mongoose.Schema({
deviceType : String,
code: String
})
export const model = mongoose.model("device", deviceSchema);
Заполнение установки:
var installationsSchemaModel = require("INSTALLATIONS.js");
installationsSchemaModel.model.find().populate('devices.ids')
Я получаю эту ошибку:
2016-06-23T15:40:26.328Z - error: installations CastError: Cast to number failed for value "576ab1796c2672501fa69054" at path "_id"
Вот как выглядят мои соответствующие данные в монго:
///INSTALLATION I'm trying to populate. The collection contains this single item
{
"_id" : 131,
"devices" : [{
"deviceType" : "TYPE1",
"ids" : [ObjectId("576ab1796c2672501fa69054")]
}]
}
///DEVICE i'm trying to reference
{
"_id" : ObjectId("576ab1796c2672501fa69054"),
"deviceType" : "TYPE1"
}
Почему я получаю ошибку, только пытаясь заполнить мою коллекцию?
Я попытался изменить тип installation._id на Number, и ошибка исчезла, но заполнение все же не удалось: полученная структура была с пустым массивом устройств.
Что я должен сделать, чтобы исправить эту ошибку?
1 ответ
Хорошо, я решил это. Я думаю, что Мойда не права, потому что смена типа в поле _id также описана в официальной документации Mongoose.
Ошибка была в определении массива идентификаторов. Массив должен быть определен так
ids: [{type: mongoose.Schema.Types.ObjectId, ref: "device"}]
Решение, которое я принял в этом вопросе, не работает, несмотря на то, что я нашел его в других постах на stackru. Я думаю, что это может быть связано с предыдущей версией Mongoose, в которой определение массивов можно было выполнять обоими способами.