首页 > 解决方案 > Mongodb 不保存文档

问题描述

我正在尝试从 HTML 公式中存储一些数据。我使用 HTTP POST 方法发送数据,并使用 Node.js 中的 Express 框架接收它们。数据到达并且它似乎可以工作,但是当我尝试使用 Mongoose 将它们存储到 MongoDB 中时,创建了数据库,但是当我执行 DB.sis_dictionary.find() 时没有存储数据

我尝试构建不同类型的模式和模型,但似乎都没有。而且我没有从 Node.js 得到任何错误,它似乎工作正常,但 MongoDB 数据库不存储任何内容。

const Mongoose = require('mongoose');
Mongoose.connect('mongodb://localhost:27017/sis_dictionary', {useNewUrlParser: true});
const Schema = Mongoose.Schema;
const wordSchema = new Schema({
  word: String
})
const Word = Mongoose.model('Word', wordSchema);

app.post('/saveWord', (req, res) => {
    var word = new Word({word: String(req.body)});
    word.save(function(err){
      if(err) {
        return console.error(err);
      } else {
        console.log("STATUS: WORKING");
      }
    })
    console.log(req.body);
})

server.listen(3000);

console.log("SERVER STARTUP SUCCESS");

在控制台中,我收到消息:“状态:正在工作”。

标签: javascripthtmlnode.jsmongodb

解决方案


sis_ditionary是您的数据库名称,Words应该是您的集合名称。如果从模式创建时未指定模型名称,mongoose 会自动为从模型中的集合创建复数名称

db.collection.find()是使用 mongo-shell 时查找集合数据的命令。运行以下命令以获取数据:

  • use sis_dictionary

  • db.Words.find()

    美化结果使用漂亮的方法

    db.Words.find().pretty()

第一个命令将选择 DB 和第二个命令列表收集数据。

所以当你执行db.sis_dictionary.find()它时它不起作用,因为 sis_dictinary 是你的数据库名称。

Nodejs 方式与“猫鼬”

//Model.find({});
  Word.find({});

另外,检查这一行var word = new Word({word: String(req.body)}); req.body 有什么?如果 req.body 是{word:"example word"}那么你直接将 req.body 传递给模态构造函数,即new Word(req.body)


推荐阅读