Пытаясь заполнить вложенный массив в мангусте, бросается казалось бы не связанный 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, в которой определение массивов можно было выполнять обоими способами.

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