Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Mongoose总是返回空数组吗?_Node.js_Mongodb_Mongoose Schema - Fatal编程技术网

Node.js 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,

我是nodejs的新手。我已经有一个数据库名为aqi,集合名为pln。我试图在网页上显示集合中的所有记录,但mongoose总是返回空数组。 我已经用其他dbs测试过了,但是我可以从他们那里得到数据,但是对于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));
        }
    });
});

如果您这样定义您的模型:
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哈哈,谢谢你^^