查询返回一个空对象

时间:2019-08-18 18:29:59

标签: node.js mongodb express mongoose

我试图通过MongoDBmongoose数据库中读取设备列表,即使数据库内部存在一个文档,我得到的结果也是一个空数组。

下面您可以看到项目中的主要文件:

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();没有任何值。我在做什么错了?

备注:

  • 我使用的是nodeJSexpressmongoose
  • 这是我在nodeJS中所做的第一个项目

1 个答案:

答案 0 :(得分:0)

猫鼬通过将模型创建的第一个参数设为复数来考虑集合名称。因此,在上述情况下,它会将装备转换为装备,并查找实际上不存在的具有该名称的集合。为了避免这种麻烦,您可以做的是在模型实现中将集合名称作为第三个参数传递。您的模型生成代码如下:

const Equip = mongoose.model('Equip', schemaEquip, 'equip');

希望这会有所帮助:)