繁体   English   中英

MongoDB - Mongoose.model.find 返回一个空数组

[英]MongoDB - Mongoose.model.find returning an empty array

我有一个简单的 Node.js 应用程序,我正在尝试与本地主机上的 MongoDB 通信,但是当我执行 mongoose.model.find 时,我似乎无法返回存储在数据库中的任何文档

当我使用指南针探索它时,我的数据库中显然有 2 个文档:

在此处输入图像描述

这是我的代码:

var DB_HOST = 'localhost'
var DB_PORT = 27017

const options = {
    poolSize: 1000,
    keepAlive: 6000000,
    connectTimeoutMS: 6000000,
    autoReconnect: true,
    reconnectTries: 300000,
    reconnectInterval: 5000,
    useNewUrlParser: true
  };

module.exports = {
    'options' : options,
    'url' : 'mongodb://'+DB_HOST+':'+DB_PORT
};

mongoose.connect(configDB.url, configDB.options);

...

var mongoose = require('mongoose');

const messagesSchema = new mongoose.Schema({
    message: { type: String, required: true },
    year: { type: String, required: true }
});

const Message = mongoose.model('Message', messagesSchema);

async function getMessagesByYear(req, res) {
    try {
        const queryYear = req.headers.query;
        console.log("Get Messages by Year " + queryYear);

        const messages = await Message.find({ year: queryYear });
        console.log('messages: ' + messages);
        res.status(200).json(messages);
    } catch (err) {
        console.log("Unable to get messages", err);
        res.status(400).json({ message: "Unable to get messages" });
    }
}

任何建议或帮助将不胜感激!

尝试在调试模式下单步执行代码,添加了打印输出但看不出为什么上面的 function 返回一个空数组。 还检查了与我的数据库的连接,它显示了正确的状态 (2)

您的 model 将引用名为messages的集合,但数据库中的集合名为Messages 您可以重命名集合,也可以在制作 model 时指定集合,如下所示:

const Message = mongoose.model('Message', messagesSchema, 'Messages');

按照惯例,collections 是小写的,所以我建议重命名该集合。

看起来您也没有指定在建立连接时要使用的数据库。 您可以在连接 URI 本身或连接选项中执行此操作。 在连接 URI 中执行此操作(这是更常见的方式)将如下所示:

'mongodb://'+DB_HOST+':'+DB_PORT+'/message'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM