这是我的新手,需要一点帮助:
我有两个Mongodb集合(我使用猫鼬),客户和选项。
它们没有相互链接。
我需要在另一个应用程序的一页上访问这两个数据集。
我可以创建一个指向以下每个集合的API路由:
客户:https://example.com/api/clients
选项:https://example.com/api/options
但是将这两个合并为一个 API路由的最佳方法是什么,例如:
https://example.com/api/clients_options(与网址无关,我只需要两组数据“客户端和选项”即可从两者访问)。
这是我的客户模型/架构:
const ClientSchema = new mongoose.Schema({
client: String,
brands: [
{
type: mongoose.Schema.Types.ObjectId,
ref: 'Brand'
}
]
});
module.exports = mongoose.model('Client', ClientSchema);
这是我的选项模型/架构:
const OptionsSchema = new mongoose.Schema({
agencies: Array,
asset_types: Array,
format: Array,
});
module.exports = mongoose.model('Options', OptionsSchema);
我一直认为最好的方法是创建一个 master 模型/架构,该模型/架构将 Clients 和 Options 架构包装在一起, 客户端模型/架构包装品牌架构的方式。
例如:
const MasterSchema = new mongoose.Schema({
clients: {
type: mongoose.Schema.Types.ObjectId,
ref: 'Clients'
},
options: {
type: mongoose.Schema.Types.ObjectId,
ref: 'Options'
}
});
module.exports = mongoose.model('Master', MasterSchema);
但是,当我这样做时,新的Masters Model / Schema似乎没有填充现有的Client and Option Model / Schemas,因此我的新 Master Model / Schema保持空白,而没有不能创建为收藏?
有更好的方法吗?
以下是我的每条路线:
//CLIENT API
app.get('/api/clients',function(req, res){
Client.find({})
.populate({
path: 'brands',
populate: {
path: 'campaigns',
model: 'Campaign'
}
}).exec(function(err, clients){
if(err) {
console.log('ERROR!');
} else {
let data = [];
clients.forEach(client => {
//console.log(client);
data.push(client);
});
res.send({clients: data});
}
});
});
//OPTIONS API
app.get('/api/options',function(req, res){
Options.find({})
.exec(function(err, options){
if(err) {
console.log('ERROR!');
} else {
let data = [];
options.forEach(option => {
//console.log(client);
data.push(option);
});
res.send({options: data});
}
});
});
我想将两者的数据合并到一个api中,这样我只能在另一个应用程序中调用一个API URL来访问所有数据,但无法弄清楚如何/最好的方法?
答案 0 :(得分:0)
我设法弄清楚了,我是通过以下方式做到的:
//ALL DATA API
app.get('/api/data',function(req, res){
Client.find({})
.populate({
path: 'brands',
populate: {
path: 'campaigns',
model: 'Campaign'
}
}).exec(function(err, clients){
if(err) {
console.log('ERROR!');
} else {
let clientData = [];
clients.forEach(client => {
//console.log(client);
clientData.push(client);
});
Options.find({})
.exec(function(err, options){
if(err) {
console.log('ERROR!');
} else {
let optionsData = [];
options.forEach(option => {
//console.log(client);
optionsData.push(option);
});
res.send({clients: clientData, options: optionsData});
}
});
}
});
});