MongoDB:如何使用expressjs读取所有集合中的所有文档?

22 浏览
0 Comments

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);
                });

需要在这里寻求帮助!

0
0 Comments

问题的出现原因是在尝试读取每个集合时,返回了一个错误信息 "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();
            });
        });
    });
})

不管怎样,我不知道你为什么要这样做,我希望这是在小型数据库上进行开发过程,因为我认为将打印出所有集合中的所有元素并不是一个好主意。

0