【问题标题】:MongoDB not returning data MEAN Stack AppMongoDB 不返回数据 MEAN Stack App
【发布时间】:2020-05-13 08:34:17
【问题描述】:

对于 MEAN 堆栈和编程来说非常新。我正在将 mongoDB 数据库连接到 Node/Express 后端,除了空数组之外,我无法让 mongoDB 返回任何内容。

这是我的站点模型

const mongoose = require('mongoose');
const siteSchema = mongoose.Schema({
  siteId: { type: Number, required: true },
  utility: { type: String, required: true},
  company: { type: String, required: true},
  address: {
    street: String,
    city: String,
    state: String,
    zip: String
  },
  contact: {
    person: String,
    phone: String,
    cell: String,
    fax: String,
    email: String
  },
  siteType: String,
  siteUse: String,
  utilityStatus: String,
  hazards: [{
    hazardId: Number,
    altAddress: {
      street: String,
      city: String,
      state: String,
      zip: String
    },
    locationOnSite: String,
    notes: String,
    hazard: String,
    check: String,
    trapType: String,
    frequency: String,
    trapSize: String,
    testDue: String,
    testExtendedTo: String,
    installDue: String,
    installExtendedTo: String,
    deviceDeficiency: String,
    deviceDeficiencyExtendedTo: String,
    lastTest: String,
    lastTestBy: String,
    lastTestPass: String,
    pumpedBy: String,
    deviceStatus: String,
    lastletterType: String,
    lastLetterSent: String,
    updatedBy: String,
    updatedDate: String,
    webfee: Number,
    mailRecipients: [{
      contact: String,
      Company: String,
      address: {
        street: String,
        city: String,
        state: String,
        zip: String
      },
      phone: String,
      fax: String,
      email: String
    }]
  }]
});

module.exports = mongoose.model('Site', siteSchema);

这是我的 sites.js 路由

const express = require('express');

const Site = require('../models/site');

const router = express.Router();

router.get("", (req, res, next) => {
  const siteQuery = Site.find();
  console.log(siteQuery);
  let fetchedSites;
  siteQuery.then(documents => {
    fetchedSites = documents;
    return Site.count();
  })
  .then(count => {
    res.status(200).json({
      message: 'Filler',
      sites: fetchedSites,
      siteCount: count
    });
  });
});

module.exports = router;

我已成功连接到数据库,但这是我得到的唯一输出

{"message":"Filler","sites":[],"siteCount":0}

当我 console.log(siteQuery) 打印 mongoose Query 对象时。

任何帮助将不胜感激

【问题讨论】:

  • 那么当你打印了console.log(siteQuery),它是打印[] 吗?正在连接到正确的数据库吗?
  • 您确定现有数据库中的此集合中有文档吗?
  • 我编辑了我的问题以显示在我登录 siteQuery 时打印到控制台的内容,是的,数据库中有文档。我可以去指南针和在线门户网站,从那些地方查询文件没有问题。

标签: node.js mongodb mongoose


【解决方案1】:

你可以这样试试吗?我将您的代码转换为 async/await 语法。 Model.count 也被弃用了,所以我使用了 countDocuments。

router.get("/", async (req, res, next) => {
  try {
    const fetchedSites = await Site.find({});

    const count = await Site.countDocuments();

    res.status(200).json({
      message: "Filler",
      sites: fetchedSites,
      siteCount: count
    });
  } catch (err) {
    console.log(err);
    res.status(500).send("Something went wrong");
  }
});

【讨论】:

  • 这段代码仍然得到同样的结果。感谢您展示 countDocuments() !我还没有找到新的方法来做到这一点。
  • @camstar915 那么您的站点集合中可能没有文档。请检查您的应用连接到的数据库和集合。
  • 集合中有文档
  • @camstar915 你能显示到 mongodb 的连接字符串,以及那个文件的屏幕截图吗?
  • 刚刚看到这条评论,最终不得不通过 mongo 支持。我感谢您的帮助!!这是连接字符串的问题。
【解决方案2】:

我从 mongoDB 获得的连接字符串存在问题。我必须将数据库中的所有分片添加到“@”之后的连接字符串中,并用逗号分隔它们,并且必须将默认连接字符串中的“test”替换为我的数据库名称,并且它起作用了!

如果您在使用 mongoDB Atlas 时遇到类似问题,我最终不得不使用 mongo 的聊天支持,他们能够在大约 30 分钟后找到问题。

【讨论】:

    猜你喜欢
    • 2017-07-24
    • 2017-08-30
    • 2016-03-19
    • 1970-01-01
    • 2016-04-14
    • 2016-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多