我试图通过MongoDB
从mongoose
数据库中读取设备列表,即使数据库内部存在一个文档,我得到的结果也是一个空数组。
下面您可以看到项目中的主要文件:
server.js
const mongoose = require('mongoose');
const app = require('./app');
const DB_URI = 'mongodb://localhost:27017/metrolog';
mongoose
.connect(DB_URI, {
useNewUrlParser: true
useCreateIndex: true,
useFindAndModify: false
})
.then(() => {
console.log('Connected to MongoDB!');
});
const port = process.env.PORT || 3000;
app.listen(port, console.log(`Listening on port: ${port}`));
app.js
const express = require('express');
const routerEquip = require('./routerEquip');
const app = express();
app.use(express.urlencoded({ extended: false }));
app.use(express.json());
app.use('/api/equip', routerEquip);
module.exports = app;
routes.js
const express = require('express');
const controllerEquip = require('./../controllers/equip');
const router = express.Router();
router.route('/').get(controllerEquip.getEquips);
module.exports = router;
models/equip.js
const mongoose = require('mongoose');
const schemaEquip = new mongoose.Schema({
description: {
type: String,
trim: true,
maxlength: 50
},
model: {
type: String,
trim: true,
maxlength: 50
}
});
const Equip = mongoose.model('Equip', schemaEquip);
module.exports = Equip;
controllers/equip.js
const Equip = require('./../models/equip');
exports.getEquips = async (req, res) => {
const equip = await Equip.find();
res.status(200).json({
result: 'success',
rows: equip.length,
data: { equip }
});
MongoDB
中的文档:
screenshot from MongoDB Compass
通过访问URL http://localhost:3000/api/equip
,我得到的结果是:
{
"result": "success",
"rows": 0,
"data": {
"equip": []
}
}
请帮助我了解为什么命令const equip = await Equip.find();
没有任何值。我在做什么错了?
备注:
nodeJS
,express
和
mongoose
nodeJS
中所做的第一个项目答案 0 :(得分:0)
猫鼬通过将模型创建的第一个参数设为复数来考虑集合名称。因此,在上述情况下,它会将装备转换为装备,并查找实际上不存在的具有该名称的集合。为了避免这种麻烦,您可以做的是在模型实现中将集合名称作为第三个参数传递。您的模型生成代码如下:
const Equip = mongoose.model('Equip', schemaEquip, 'equip');
希望这会有所帮助:)