【问题标题】:MongoDB .find() returning null when documents are present存在文档时,MongoDB .find() 返回 null
【发布时间】:2021-11-07 12:47:15
【问题描述】:

我是 MongoDB 的新手,目前正在关注 a blog tutorial,它教我如何使用 MERN 堆栈构建网站。

问题

问题出在后端,尤其是从后端检索文档。我自己(通过网站)将文档插入数据库进行测试。它位于一个名为“Articles”的集合中:

_id:613c75edd38cd146c0b8a1df
title:"An experimental evaluation of test driven development vs. test-last de..."
authors:"Munir, H., Wnuk, K., Petersen, K., Moayyed, M."
source:"EASE"
pubyear:"2014"
doi:"https://doi.org/10.1145/2601248.2601267"
claim:"code quality improvement"
evidence: "strong support"

我的文件

以下是文章数据库模型:

const mongoose = require('mongoose')

const ArticleSchema = new mongoose.Schema({
    id: {
        type: Number
    },
    title: {
        type: String,
        required: true
    },
    authors: {
        type: String,
        required: true
    },
    source: {
        type: String,
        required: true
    },
    pubyear: {
        type: String,
        required: true
    },
    doi: {
        type: String,
        required: true
    },
    claim: {
        type: String,
        required: true
    },
    evidence: {
        type: String,
        required: true
    }


});

module.exports = Articles = mongoose.model('Articles', ArticleSchema);

路线如下:

// routes/api/articles.js

const express = require('express');
const router = express.Router();

// Load Articles model
const Articles = require('../../models/Articles');
console.log(Articles);

// @route GET api/articles/test
// @description tests articles route
// @access Public
router.get('/test', (req, res) => res.send('articles route testing!'));

// @route GET api/articles
// @description Get all articles
// @access Public
router.get('/', (req, res) => {
  Articles.find()
    .then(articles => res.json(articles))
    .catch(err => res.status(404).json({ noarticlesfound: 'No articles found' }));
});

// @route GET api/articles/:id
// @description Get single articles by id
// @access Public
router.get('/:id', (req, res) => {
  Articles.findById(req.params.id)
    .then(article => res.json(article))
    .catch(err => res.status(404).json({ noarticlefound: 'No article found' }));
});

// @route GET api/articles
// @description add/save articles
// @access Public
router.post('/', (req, res) => {
  Articles.create(req.body)
    .then(article => res.json({ msg: 'Article added successfully' }))
    .catch(err => res.status(400).json({ error: 'Unable to add this article' }));
});

// @route GET api/article/:id
// @description Update article
// @access Public
router.put('/:id', (req, res) => {
  Articles.findByIdAndUpdate(req.params.id, req.body)
    .then(article => res.json({ msg: 'Updated successfully' }))
    .catch(err =>
      res.status(400).json({ error: 'Unable to update the Database' })
    );
});

// @route GET api/article/:id
// @description Delete article by id
// @access Public
router.delete('/:id', (req, res) => {
  Articles.findByIdAndRemove(req.params.id, req.body)
    .then(article => res.json({ mgs: 'Article entry deleted successfully' }))
    .catch(err => res.status(404).json({ error: 'No such a article' }));
});

module.exports = router;

后端完美运行。当我去测试路线时,它会返回预期的字符串。但它似乎在检索任何内容时总是返回一个空集合 ([])。

我的 app.js 文件:

// app.js

const express = require('express');
const connectDB = require('./config/db');
var cors = require('cors');

// routes
const articles = require('./routes/api/articles');

const app = express();

// Connect Database
connectDB();

// cors
app.use(cors({ origin: true, credentials: true }));

// Init Middleware
app.use(express.json({ extended: false }));

app.get('/', (req, res) => res.send('Hello world!'));

// use Routes
app.use('/api/articles', articles);

const port = process.env.PORT || 8085;

app.listen(port, () => console.log(`Server running on port ${port}`));

我的尝试

我在 Stack Overflow 上看到的大多数问题似乎都与 db.collection.find 类似,但在本教程中它并没有说明如何检索这样的数据,因此我无法尝试大多数修复.

我确实在 Articles 集合中注意到 id 实际上是 _id,所以我对文章的数据库模型进行了更改,但没有任何变化。

【问题讨论】:

    标签: node.js mongodb express


    【解决方案1】:

    这是我通常遵循的格式,但您能否包含此修改并检查它是否有效?
    我尝试使用不同的数据库,它对我有用。

    router.get("/", function (req, res) {
      Articles.find({}, function (err, allDetails) {
        if (err) {
          console.log(err);
        } else {
          res.json(allDetails);
        }
      });
    });
    
    

    【讨论】:

    • 我试过了,不幸的是得到了同样的结果
    • 我已经更新了代码。请检查一下。
    • 顺便感谢您的帮助!但同样的问题,它仍然返回一个空结果。在这一点上我完全迷失了。
    • 我设法解决了所有问题。我首先使用在线 api 测试器测试了我的后端,它一直返回错误 400。从那时起我已经做了很多,所以我真的不记得问题是什么了。我确实意识到我无法提交文章的原因是因为我没有放入文章数据库模型所具有的所有变量。大约在那个时候,我发现了另一个错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-09
    • 2020-09-07
    • 1970-01-01
    • 1970-01-01
    • 2015-07-05
    • 2014-09-29
    相关资源
    最近更新 更多