0

Использование мангуста и экспресс с MongoDBКак перенаправить рекурсивную схему ссылок Mongodb, Mongoose, Express?

Так что сейчас у меня есть схемы для коробки, коробка может содержать объекты, или он может содержать другие поля:

моей схему для ящиков выглядит следующим образом:

var box = new Schema({ 
    boxId: ObjectId, 
    boxContents: [{ 
     contentType: { 
      type: String, 
      enum: ["box", "object"] 
     }, 
     typeId: { 
      subBox: { 
       type: Schema.Types.ObjectId, 
       ref: 'box' 
      }, 
      subObject: { 
       type: Schema.Types.ObjectId, 
       ref: 'object' 
      } 
     } 
    }] 
}); 

Я удостоверился, что мой «ref» помечен соответственно именам моделей, поэтому я не считаю, что это проблема. Я создаю новый документ, например, так:

var box1 = new Box({ 
    contents: [{ 
     contentType: 'object', 
     typeId: { 
      subObject: object1._id 
     } 
    }] 
}); 

Когда я использую:

Control.find({}).populate('contents.typeId') 
.exec(function(error, posts) { 
    console.log(JSON.stringify(posts, null, "\t")); 
}); 

Это не заселить subBox и поля подобъекте :(Если я пытаюсь получить доступ к subBox или подобъекте поля, его .? дает мне неопределенный Что я делаю неправильно

+0

ли, что 'subObject' с этим' _id' существует в базе данных? – Chinni

+0

Да, да, я добавил как subObject, так и subBox, и когда я просматриваю базу данных, оба отображаются вверх –

+0

Можете ли вы обновить свой вопрос с образцовыми объектами, содержащимися в вашей базе данных? – Chinni

ответ

0

Прежде всего, вам нужно получить модель коллекции:

var BoxModel = mongoose.connect(dbURI).model("box", box);

boxContents в схеме, но в объекте содержание, которое должно быть изменено. Чтобы создать объект будет сохранить, необходимо использовать модель таким образом, а затем вы можете получить заселены данные таким образом:

var box1 = new BoxModel({ 
 
    boxContents: [{ 
 
     contentType: 'object', 
 
     typeId: { 
 
      subObject: object1._id 
 
     } 
 
    }] 
 
}); 
 

 

 
BoxModel.find({}).populate('boxContents.typeId'); 
 
OR 
 
BoxModel.find({}).populate({path:'boxContents.typeId'});

Смежные вопросы