猫鼬总是返回空数组? [复制]
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 哈哈,谢谢你^^以上是关于猫鼬总是返回空数组? [复制]的主要内容,如果未能解决你的问题,请参考以下文章