2016-06-23 6 views
0

Я новичок в mongoose, и я пытаюсь провести очень простые эксперименты со ссылками и схемами.Попытка заполнить вложенный массив в mongoose, казалось бы, несвязанный 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 и ошибку whent away, но население все же потерпело неудачу: полученная структура была с пустым массивом устройств.

Что мне делать, чтобы исправить эту ошибку?

+0

Свойство '_id' является внутренним идентификатором MongoDB, который вам не нужен (может быть, даже не должен) определять его и, конечно же, не менять его тип! Не делайте этого '' _id ": 131,'. Если вам нужно собственное свойство id в вашей схеме, просто используйте что-то еще, возможно, просто 'id'. – Molda

ответ

1

Хорошо, я разрешил это. Я думаю, что Moida ошибается, потому что изменение типа в поле _id также включено в официальную документацию Mongoose.

Ошибка была в определении массива ids. Массив должен быть определен как этот

ids: [{type: mongoose.Schema.Types.ObjectId, ref: "device"}] 

Решение я принял в этом вопросе не работает, несмотря на то, что я нашел его в различных других постах на StackOverflow. Я думаю, что это может быть связано с предыдущей версией Mongoose, в которой определение массивов может быть выполнено в обоих направлениях.