【问题标题】:Mongoose always return empty array? [duplicate]猫鼬总是返回空数组? [复制]
【发布时间】:2018-08-28 02:42:08
【问题描述】:

我是 nodejs 的新手。我已经有一个名为 aqi 的数据库,其集合名称为 pln。我试图在网页上显示集合中的所有记录,但猫鼬总是返回空数组。 我已经用其他数据库对其进行了测试,但我可以从它们那里获取数据,但是对于 pln mongoose 总是返回空数组。 如果有人可以帮助我,我将不胜感激。 这是我的架构

var Pln = new Schema({
    latit      : Number,
    longit     : Number,
    timestmp   : String,
    co         : Number,
    smoke      : Number,
    O3         : Number,
    humidity   : Number,
    temperature: Number,
    co2        : Number,
    dust       : String
});
var plnModel = mongoose.model('pln', Pln);

这是我的路线。

app.get('/', function(req, res) {
    res.contentType('application/json'); 
    plnModel.find({}, function(err, pln) {
        if (pln != null) {
            console.log('Found the User:' + pln.latit);
            res.send(JSON.stringify(pln));
        }
    });
});

【问题讨论】:

  • 你怎么知道它返回一个空数组?你没有记录它。 pln 在一个数组中,所以测试 if (pln != null) 是没有用的,因为这总是正确的。另一方面,pln.latit 将始终未定义,因为 [].latit 未定义。另外,你为什么要对文件进行字符串化?它不起作用,因为您设置了contentType('application/json') 并且您正在发回一个字符串。只需发回res.status(200).json(pln)。
  • 我确实记录了它,并且在控制台中它也返回 []。但是我已经用我的测试数据库对其进行了测试,我可以看到所有数据。
  • 您的数据库名称是什么?它有多少条记录?
  • 数据库名称是aqi,集合名称是pln,大约有1610条记录

标签: node.js mongodb mongoose-schema


【解决方案1】:

如果您这样定义模型:mongoose.model('pln', Pln),那么您的集合必须命名为 'plns'(= 您的模型名称 + s)

如果不是这样,那么你必须告诉 Mongoose 你有一个自定义集合名称(在你的情况下,来自你的 cmets,'pln' 不带 s)使用:

mongoose.model('pln', Pln, 'pln'),第三个参数是您收藏的实际名称。

看看这段代码:

app.get('/', async (req, res) => {
    
    try {
        const pln = await plnModel.find().lean().exec(); // "lean" to get only JSON data (not Mongoose objects), faster
        console.log('Found Users :', pln);
        res.status(200).json(pln);
    } catch(err) {
        res.status(500).json(err);
    }
});

【讨论】:

  • 非常感谢你,伙计……你是救生员……工作得很好。
  • @JeremyThille 感谢您的回答并直截了当。我发现这个问题的其他 2 个答案对我来说并没有真正点击,但现在我明白出了什么问题。
  • 非常感谢,杰里米。你太棒了
  • @pdsla112 哈哈,谢谢你^^
猜你喜欢
  • 2022-11-22
  • 1970-01-01
  • 1970-01-01
  • 2016-04-28
  • 2017-03-30
  • 1970-01-01
  • 2013-09-08
相关资源
最近更新 更多