У меня есть идея ресторана, у которой будут ветки, а каждая ветка имеет меню, и в каждом меню есть предметы с указанной ценой для этой ветки!Комплексное отношение в Mongoose
и моя схема:
var mongoose = require('mongoose');
var eaterySchema = mongoose.Schema({
name: String,
type: Number,
branches: [{type: Schema.Types.ObjectId, ref: 'Branch' }]
});
var branchSchema = mongoose.Schema({
id: Number,
name: String,
eatery: {type: Schema.Types.ObjectId, ref: 'Eatery'},
menu: {type: Schema.Types.ObjectId, ref: 'Menu'}
});
var menuSchema = mongoose.Schema({
branch: {type: Schema.Types.ObjectId, ref: 'Branch'},
items: [{type: Schema.Types.ObjectId, ref: 'Item'}]
});
var itemSchema = mongoose.Schema({
name: String,
description: String
});
var itemMenuSchema = mongoose.Schema({ //Many-To-Many Table
menu: {type: Schema.Types.ObjectId, ref: 'Menu'},
item: {type: Schema.Types.ObjectId, ref: 'Item'},
price: Number
});
var Eatery = mongoose.model('Eatery', eaterySchema);
var Branch = mongoose.model('Branch', branchSchema);
var Menu = mongoose.model('Menu', menuSchema);
var Item = mongoose.model('Item', itemSchema);
var ItemMenu = mongoose.model('ItemMenu', itemMenuSchema);
ли запрос ниже написанные справа, чтобы получить меню с деталями и ценами для запрошенного филиала ид?
Branch
.findOne({id: '@GivenId'})
.populate('eatery menu')
.exec(function(err, doc){
doc
.populate('menu.items')
.exec(function(err, doc){
ItemMenu
.find({})
.where('menu._id').equals(doc.menu._id)
.exec(function(err, items){
doc.push(items);
res.send(docs);
})
})
};)
});
и не мангуст обеспечивает заселить дело с последним запросом, который я написал в последнем обратном вызове? и какое лучшее решение для решения этого сложного отношения?
Большое спасибо
Большое спасибо. Я имел дело с этим как реляционным, потому что мангуста написана для рассмотрения mongoDB как объектов. как бы вы предпочли мне построить схему для этого примера, которая у меня выше? –
Большое спасибо, вы спасли мой день :), говоря это, прежде чем получить ответ. и сто благодарности после этого;) –