ExpressJS中的db.listCollections()返回错误

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ExpressJS中的db.listCollections()返回错误相关的知识,希望对你有一定的参考价值。

我正在使用ExpressJs + MongoDB,以下代码返回错误:

var db = monk(DB_URL);
app.use(function (req, res, next) {
  req.db = db;
  next();
});

app.get("/view_collections", function (req, res) {
    var db = req.db;
    db.listCollections().toArray(function (err, collections) {
        console.log(collections);
    }); 
});

错误是:

TypeError: db.listCollections is not a function.

其他功能完美。例如,以下代码正在运行:

app.get('/testCollection', function (req, res) {
  var collection = req.db.get('testData');
  collection.find({}, {
    limit: 300,
    sort: {
      timestamp: -1
    }
  }, (e, entries) => {
    res.render('testView', {
      entries: entries
    });
  });
});

我尝试了db.getCollectionNames()db.listCollections(),但两者都返回相同的错误但在shell db.getCollectionNames()工作。

有人可以告诉我如何获取里面的MongoDB集合列表,

app.get("/view_collections", function (req, res) {
    //Here
});
答案

我遇到了同样的错误,修复可以是:

MongoClient.connect(url, function(err, client) {


     const db = client.db(DBNAME)

     db.listCollections().toArray(function(err, items) {
        console.log(items)
            //and u can loop over items to fetch the names
            client.close();
    });
})
另一答案

也许这澄清了更多:

const url = 'mongodb://localhost:27017/testdb';

MongoClient.connect(url, (err, client) => 

    const db = client.db('testdb');

    db.listCollections().toArray((err, collections) => {

       console.log(collections);

       client.close();
    });

});

请注意,两行中有相同的'testdb':

const url = 'mongodb://localhost:27017/testdb';

const db = client.db('testdb');

当错过url中的'testdb'时,工作方式相同:

const url = 'mongodb://localhost:27017/';

以上是关于ExpressJS中的db.listCollections()返回错误的主要内容,如果未能解决你的问题,请参考以下文章

CORS 阻止 Expressjs 中的文件上传

ExpressJS:如何忽略路由中的公共静态文件?

什么是 connect/expressjs 中的“签名”cookie?

AngularJS中的ExpressJS变量 - 平均堆栈

访问 ExpressJS/ConnectJS 中间件中的“app”变量?

异步和递归目录扫描,用于 Nodejs 和 Expressjs 中的文件列表