MongoDB:如何使用expressjs读取所有集合中的所有文档?
MongoDB:如何使用expressjs读取所有集合中的所有文档?
我有一个包含多个集合中多个文档的MongoDB数据库,我想要遍历它们中的每一个。以下是我的代码:
const mongo = require('mongodb'); const url = 'mongodb://localhost:27017/test'; mongo.connect(url, { useNewUrlParser: true }, (err, db) => { console.log('连接成功'); db.db().listCollections().toArray((err, colls) => { colls.forEach(element => { db.db().collection(element.name.toString()).find().toArray((err, doc) => { console.log(doc); }); }); }); db.close(); });
这是我从listCollections()得到的结果:
[ ...., { name: 'documetn1', type: 'collection', options: {}, info: { readOnly: false, uuid: [Binary] }, idIndex: { v: 2, key: [Object], name: '_id_', ns: 'test.documetn1' } }, ...]
不知何故,我得到的结果是空:
db.db().collection(element.name.toString()).find().toArray((err, doc) => { console.log(doc); });
需要在这里寻求帮助!
问题的出现原因是在尝试读取每个集合时,返回了一个错误信息 "MongoError: Topology was destroyed"。根据Carlos Rodríguez在与此错误相关的问题的回答中所说,这似乎是由于过早的 db.close() 导致的,所以可以通过以下方式进行修复:
const mongo = require('mongodb'); const url = 'mongodb://localhost:27017/test' mongo.connect(url, { useNewUrlParser: true }, data, (err, db) => { console.log('connection success'); db.db().listCollections().toArray((err, colls) => { var collsPrinted = 0; colls.forEach(element => { db.db().collection(element.name).find().toArray((err, doc) => { console.log(doc); if (++collsPrinted == colls.length) db.close(); }); }); }); })
不管怎样,我不知道你为什么要这样做,我希望这是在小型数据库上进行开发过程,因为我认为将打印出所有集合中的所有元素并不是一个好主意。