猫鼬总是返回空数组? [复制]

Posted

技术标签:

【中文标题】猫鼬总是返回空数组? [复制]【英文标题】: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条记录 【参考方案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 哈哈,谢谢你^^

以上是关于猫鼬总是返回空数组? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

猫鼬填充返回空数组

使用猫鼬填充时返回一个空的帖子数组

如何使用猫鼬更新子文档数组中的特定元素? [复制]

比较数组并丢弃空值? [复制]

减少返回空数组

如何使用猫鼬复制字段数据并在同一文档的另一个字段中使用它?