Node.js MongoDB动态集合名称

时间:2018-08-06 06:52:41

标签: javascript node.js mongodb mongoose

我有几个mongodb集合,

 Fruits: [ {}, {}, {} ...],
 Bread: [{}, {}, {} ...]

我想在服务器中使用动态集合名称

// :collection will be "Fruits" or "Bread" 

app.get('/fetch/:collection', function (req, res){

    [req.params.collection].find({}, function(err, docs){
        res.json(docs)
    }) 

})

但是您知道,[req.params.collection].find()...无法正常工作。如何使用动态集合名称?

3 个答案:

答案 0 :(得分:2)

您可以使用以下不同的集合 db.collection('name')。find({})

这是我尝试过的代码
App.js

const express = require('express');
const bodyParser = require('body-parser');

const MongoClient = require("mongodb").MongoClient;
const assert = require('assert');
const url = 'mongodb://localhost:27017';
var db;

MongoClient.connect(url, { useNewUrlParser: true }, function (err, client) {
assert.equal(null, err);
console.log("Connected successfully to DB");
db = client.db('name of the db');
});

var app=express();

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));

app.get('/test/:collection', function(req,res){
let collection = req.params.collection;
console.log(collection);
db.collection(collection).find({}).toArray( function (err, result) {
    res.send(result);
    });
});

var port = 8000
app.listen(port, '0.0.0.0', () => {
    console.log('Service running on port ' + port);
});

希望这会有所帮助

答案 1 :(得分:1)

这不起作用,因为您传递的集合名称只是一个没有DB游标的变量。

这是您可以在此处执行的操作:

创建一个 index.js 文件,以适当的名称作为键导入该文件中的所有模型。

例如:

cout<<d->color<<endl

假设您的请求网址为现在。

API

现在将这个index.js作为模型导入到控制器文件中。

例如:

db_user = your_db_user
db_filter = .*

现在,您可以像下面这样声明和使用,将密钥作为参数传递给请求:

const model = {
    order: require("./order"),
    product: require("./product"),
    token: require("./token"),
    user: require("./user")
}

module.exports = model;

希望这可以解决您的查询!

答案 2 :(得分:0)

我将为此提供解决方案,但我不知道这是按照开发人员标准

在模型文件夹中添加模型名称,fruit.js和Bread.js

app.get('/fetch/:collection', function (req, res){
let collectionName = require(`./models/${req.params.collection}`)

collectionName.find({}, function(err, docs){
    res.json(docs)
  }) 
})

希望这会起作用