node.js - 将 2 个 MongoDB 集合合并为一个 api URL(不合并集合,将它们分开)
问题描述
我对这一切都很陌生,需要一点帮助:
我有两个 Mongodb 集合(我使用猫鼬),Clients和Options。
它们彼此没有联系。
我需要在另一个应用程序的一个页面上访问两组 f 数据。
我可以创建一个指向这些集合的 API 路由:
客户端:https ://example.com/api/clients
选项:https ://example.com/api/options
但是将这两者合并为一个API 路由的最佳方法是什么,例如:
https://example.com/api/clients_options(URL 无关紧要,我只需要两组数据客户端和选项都可以从两者访问。)
这是我的客户模型/架构:
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);
我在想最好的方法是创建一个主模型/模式,以客户端模型/模式包装品牌模式的方式包装客户端和选项模式。
例如:
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);
但是当我这样做时,我的新主模型/架构似乎没有填充现有的客户端和选项模型/架构,所以我的新主模型/架构保持空白并且没有被创建为集合?
有一个更好的方法吗?
这些是我的路线:
//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 来访问所有数据,但无法弄清楚如何/最好的方法?
解决方案
我设法弄清楚了,我是通过以下方式做到的:
//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});
}
});
}
});
});
推荐阅读
- kotlin - 使用 kotlin dsl 脚本发布到 bintray
- python-3.x - Python:编写字节流以覆盖现有的 Microsoft 结构化存储 OLE 流
- linux - 在 s390 上构建 MariaDB
- python-3.x - 酸洗 cv2.CascadeClassifier
- c++ - dlmopen 和 C++ 库
- javascript - 如何检查 html 是否有效?
- jquery - jquery ui可拖动防止点击外部
- javascript - 以最佳方式查找数组的某个子集
- android - 罕见异常“android.accounts.AuthenticatorException: ServiceDisabled”——这是什么意思?
- python - 如何查找哪个包需要我的其他包降级