为什么我的MongoDB集合返回一个空数组

时间:2019-12-03 19:52:55

标签: node.js mongodb express

我正尝试使用find()通过Express应用显示我的MongoDB集合,但是每当我运行我的应用时,我的Mongo集合都会返回一个空数组。

我在这里找到了答案,但是他们在数据库连接中使用了Mongoose。我可以通过Mongoose进行连接,但也想通过MongoDB学习。

我通过MongoDB罗盘应用程序创建了数据库,所以没有架构文件。下面是我的代码,包括数据库连接:

dbConfig.js 我没有使用async / await函数,因为它仍然让我难以理解/关注

const { MongoClient } = require('mongodb');
var _db;

module.exports = {
    connectToServer: (callback) => {
        MongoClient.connect('mongodb://localhost:27017/TestDB', { useUnifiedTopology: true }, (err, client) => {
            _db = client.db('test');
            console.log('db is connected');
            return callback(err);
        })
    }, 
    getDb: () => {
        return _db;
    }
}

index.js 这是我的应用文件

const express = require('express');
const app = express();
const mongodbConfig = require('./config');
const port = process.env.PORT || 4000;

mongodbConfig.connectToServer( (err) => {

    const findRouter = require('./find');

    app.use('/find', findRouter);

    app.listen(port, () => console.log('App connected'));
})

findRoute.js ,这是我得到空数组的地方

const express = require('express');
const router = express.Router();
const mongodbConfig = require('./config');
const db = mongodbConfig.getDb();


router.get('/', (req, res, next) => {
    db.collection('test').find({}).toArray((err, results) => {
        if (err) console.log(err);
        res.send('That worked');
        console.log('Here are you results:', results);
    })
})


module.exports = router;

我不太确定自己缺少什么,是否有更一致的方法将Mongo合并到Express应用程序中,从而不会返回空数组?如果可能,我想将我的数据库configure / utill文件分开。

1 个答案:

答案 0 :(得分:0)

不确定是不是您的情况,但对我而言,很多时候回调函数是问题所在。我使用猫鼬,但是应该类似,在我的情况下,find总是会返回null,我如何使用异步和等待功能而不是回调函数来解决它:

var err, results = await TestModel.find(); 

其中TestModel是mongoose.Model('test',TestSchema);

您可以尝试一下