如何正确地从数据库获取信息?

时间:2019-05-06 05:46:43

标签: javascript node.js mongodb mongoose

我在mongoDB和Mongoose上遇到麻烦。我需要将数据存储在mongoDB中,因为我将其用于保存设置。应用初始化时必须加载设置。问题在于数据库并不总是返回数据。这是使所有内容清晰的屏幕截图:

  1. 返回“设置”数组。
  2. 未返回“设置”数组。
  3. “设置”数组返回“未定义”,因此脚本无法运行。

1-3个步骤是随机完成的! 我的问题是:如何正确连接数据库?数据库连接是否有问题? (操作系统-Linux Mint 19)

我尝试了几种连接到该数据库的方法:

Setup.find({})。exec()

Setup.findById('...')。exec()


mongoose.connect('mongodb://localhost:27017/config', { useNewUrlParser: true });
const setupSchema = new Schema({
    eula: Boolean,
    lang: String,
    styles: Number
});

mongoose.set('debug', true);


setupSchema.set('collection', 'setup');


const Setup = mongoose.model('Setup', setupSchema);
var eula, lang, styles;

Setup.findById('5ccfaf5a0c3c1612d4e2c905', function(err, setting){
    if (err) {
        console.log('Setup Init error');
        console.log(err);
    } else {
        console.log('Setup Contents');
        if (setting !== null || setting !== undefined){
            console.log(setting[0]);
            // eula = setting[0].eula;
            // lang = setting[0].lang;
            // styles = setting[0].styles;
        } else {
            console.log('Setting is null');
        }

    }

});

我希望数据总是会返回。 实际输出显示在屏幕截图上(请参见上文)。

UPD:我现在已经达到了这种状态(在下面的屏幕截图中),但是仍然不是很好...

UPD2:我找到了解决方案!我尝试使用MongoDB.Client,而不是猫鼬。

1 个答案:

答案 0 :(得分:1)

我猜findById函数将返回一个对象而不是一个数组,这就是为什么会出现此错误的原因。 请尝试

Setup.findById('5ccfaf5a0c3c1612d4e2c905', function(err, setting){
    if (err) {
        console.log('Setup Init error');
        console.log(err);
    } else {
        console.log('Setup Contents');
        if (setting){
            console.log(setting);
            // eula = setting.eula;
            // lang = setting.lang;
            // styles = setting.styles;
        } else {
            console.log('Setting is null');
        }

    }

});

更新的代码:

Setup.findOne({id :'5ccfaf5a0c3c1612d4e2c905'}, function(err, setting){
        if (err) {
            console.log('Setup Init error');
            console.log(err);
        } else {
            console.log('Setup Contents');
            if (setting){
                console.log(setting);
                // eula = setting.eula;
                // lang = setting.lang;
                // styles = setting.styles;
            } else {
                console.log('Setting is null');
            }

        }

    });