Node.js Mongoose总是返回空数组吗?
我是nodejs的新手。我已经有一个数据库名为aqi,集合名为pln。我试图在网页上显示集合中的所有记录,但mongoose总是返回空数组。 我已经用其他dbs测试过了,但是我可以从他们那里得到数据,但是对于pln mongoose,总是返回空数组。 如果有人能帮我,我会非常感激的。 这是我的模式Node.js Mongoose总是返回空数组吗?,node.js,mongodb,mongoose-schema,Node.js,Mongodb,Mongoose Schema,我是nodejs的新手。我已经有一个数据库名为aqi,集合名为pln。我试图在网页上显示集合中的所有记录,但mongoose总是返回空数组。 我已经用其他dbs测试过了,但是我可以从他们那里得到数据,但是对于pln mongoose,总是返回空数组。 如果有人能帮我,我会非常感激的。 这是我的模式 var Pln = new Schema({ latit : Number, longit : Number, timestmp : String,
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));
}
});
});
如果您这样定义您的模型:
mongoose.model('pln',pln)
,那么您的集合必须命名为'plns'
(=您的模型名+s)
如果情况并非如此,则您必须通过以下方式告诉Mongoose您有一个自定义集合名称(在您的情况下,根据您的注释,“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);
}
});
您如何知道它返回一个空数组?你没有把它记录下来
pln
在一个数组中,因此测试是否(pln!=null)
是无用的,因为这总是正确的。另一方面,pln.latit
将始终未定义,因为[].latit
未定义。还有,你为什么要把文件串起来?它无法工作,因为您设置了contentType('application/json')
,并且正在发回一个字符串。只需返回res.status(200).json(pln)
。我确实记录了它,并且在控制台中它也返回[]。但是我已经用我的测试数据库对它进行了测试,我可以看到所有的数据。你的数据库名是什么?它有多少条记录?db名称是aqi,集合名称是pln,大约有1610条记录。非常感谢您。。。你是个救生员。。很好,很高兴我能帮上忙。如果答案解决了您的问题,请不要忘记验证答案(并进行投票)。@JeremyThille感谢您的回答和直截了当的发言。我发现这个问题的另外两个答案对我来说并不合适,但现在我明白错在哪里了。非常感谢你,杰里米。你是amazing@pdsla112哈哈,谢谢你^^