MongoDB .find()当文档存在时返回null



我是MongoDB的新手,我目前正在遵循一个博客教程,教我如何使用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;

后端工作完美。当我转到测试路由时,它返回预期的字符串。但它似乎总是返回一个空集合([])检索任何东西。

My 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}`));

What I have try

我在Stack Overflow上看到的大多数问题似乎都是沿着db.collection.find的路线做的,但在本教程中,它没有说任何关于检索数据的事情,所以我无法尝试大多数修复。

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

这是我通常遵循的格式,但是你可以包括这个修改并检查它是否有效吗?
我用不同的DB试过了,它对我有效。

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

最新更新