簡體   English   中英

Nodejs mongodb動態集合名稱

[英]Nodejs mongodb dynamic collection name

我有幾個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()...無效。 我如何使用動態集合名稱?

您可以使用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);
});

希望這可以幫助

這不起作用,因為您傳遞的集合名稱只是一個沒有DB光標的變量。

這是你在這里可以做的:

創建一個index.js文件,導入該文件中的所有模型,並使用適當的名稱作為鍵。

例如:

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

module.exports = model;

我們假設你的請求URL現在是。

/fetch/user

現在將此index.js導入為控制器文件中的模型。

例如:

const model = require("./index");

現在您可以將密鑰作為params傳遞給您的請求,並使用如下所述:

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

    model[req.params.collection].find({}, function(err, docs){
        res.json(docs) // All user data.
    }) 
})

希望這能解決您的疑問!

我會為此提供解決方案,但我不知道這是否符合開發人員標准

讓你的模型名稱,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)
  }) 
})

希望這會奏效

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM