博客文章:Nodejs Mongoose使用案例–让JSON数据直接入库MongoDB

博客文章:Nodejs Mongoose使用案例–让JSON数据直接入库MongoDB

为什么用Nodejs?为什么用MongoDB?从领域语言和代码简洁之道来看,这是我非常关心的问题。

Nodejs基于Javascript,MongoDB脚本同样也是基于Javascript。而且他们的数据存储格式都是JSON,这就是为什么要把他们放在一起的原因了。如果程序前后端能直接处理JSON,我想数据处理过程又可以极大的减化了,代码量又将低少1/5。多么的兴奋啊!让我们来动手验证一下想法吧。

![enter image description here][1] [1]: http://blog.fens.me/wp-content/uploads/2013/05/nodejs2.png

文章目录

  1. 配置Mongoose
  2. 创建目录及文件
  3. 插入数据
  4. POST提交JSON增加一条记录
  5. 查询数据,取出刚增加的记录

文章正文: http://blog.fens.me/nodejs-mongoose-json/

程序代码已经上传到github有需要的同学,自行下载。 https://github.com/bsspirit/nodejs-demo


8 回复

博客文章:Nodejs Mongoose使用案例 – 让JSON数据直接入库MongoDB

引言

为什么用Node.js?为什么用MongoDB?从领域语言和代码简洁之道来看,这是我非常关心的问题。

Node.js基于JavaScript,MongoDB脚本同样也是基于JavaScript。而且他们的数据存储格式都是JSON,这就是为什么要把他们放在一起的原因了。如果程序前后端能直接处理JSON,那么数据处理过程将极大地简化,代码量也将大大减少。多么令人兴奋啊!让我们来动手验证一下这个想法吧。

目录

  1. 配置Mongoose
  2. 创建目录及文件
  3. 插入数据
  4. POST提交JSON增加一条记录
  5. 查询数据,取出刚增加的记录

正文

1. 配置Mongoose

首先,我们需要安装mongoose库。通过npm安装如下:

npm install mongoose --save

然后,在项目中引入Mongoose:

const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost:27017/test', { useNewUrlParser: true, useUnifiedTopology: true });
2. 创建目录及文件

假设我们有一个名为models的目录用于存放模型文件,一个名为routes的目录用于存放路由文件。创建如下文件结构:

project/
├── models/
│   └── user.js
├── routes/
│   └── user.js
└── app.js
3. 插入数据

models/user.js中定义用户模型:

const mongoose = require('mongoose');

const UserSchema = new mongoose.Schema({
    name: String,
    email: String,
});

module.exports = mongoose.model('User', UserSchema);

routes/user.js中编写插入数据的逻辑:

const express = require('express');
const router = express.Router();
const User = require('../models/user');

router.post('/add', (req, res) => {
    const newUser = new User(req.body);
    newUser.save()
        .then(result => res.send(result))
        .catch(err => res.status(500).send(err));
});

module.exports = router;
4. POST提交JSON增加一条记录

app.js中引入路由:

const express = require('express');
const app = express();
const userRoutes = require('./routes/user');

app.use(express.json()); // 中间件,解析json请求体
app.use('/api', userRoutes);

const PORT = process.env.PORT || 3000;
app.listen(PORT, () => console.log(`Server running on port ${PORT}`));

现在,你可以发送一个POST请求到/api/add,例如使用curl命令:

curl -X POST http://localhost:3000/api/add -H "Content-Type: application/json" -d '{"name": "John Doe", "email": "john.doe@example.com"}'
5. 查询数据,取出刚增加的记录

routes/user.js中添加查询逻辑:

router.get('/get/:id', async (req, res) => {
    try {
        const user = await User.findById(req.params.id);
        res.send(user);
    } catch (err) {
        res.status(500).send(err);
    }
});

现在,你可以通过发送GET请求来查询数据:

curl http://localhost:3000/api/get/<user_id>

结论

通过以上步骤,我们可以看到如何使用Node.js和Mongoose来直接处理JSON数据,并将其存储到MongoDB中。这不仅简化了开发流程,还提高了代码的可维护性。

参考资料

希望这篇文章对你有所帮助,如果有任何问题,请随时留言讨论。


你想说明什么? mongo本来就可以保存对象啊,什么叫让json直接入库

以自定义类型的数据结构,进行数据传输,从而减少转型带来的不必要的开销。

比如像例子中使用的电影数据结构。 mongodb schema设计好后,前后端传一套JSON的对象,用一套js的api,完成CRUD的操作。 比起原来操作,界面表单提交,后台获得参数,再解析到DB存储,省了中间一步。

注:对于组织这段话,我可能说的不是太清楚。 等我把应用上线了,再诠释出来吧。

楼主你好.我了你blog中关于介绍直接入库的方法 我想知道如何批量 保存了?
比如你定义了

var Schema = mongodb.mongoose.Schema;
var MovieSchema = new Schema({
name : String,
alias : [String],
publish : Date,
create_date : { type: Date, default: Date.now},
images :{
coverSmall:String,
coverBig:String,
},
source :[{
source:String,
link:String,
swfLink:String,
quality:String,
version:String,
lang:String,
subtitle:String,
create_date : { type: Date, default: Date.now }
}]
});
var Movie = mongodb.mongoose.model("Movie", MovieSchema);
var MovieDAO = function(){};
module.exports = new MovieDAO();

MovieSchema 然后你用

   MovieDAO.prototype.save = function(obj, callback) {
  var instance = new Movie(obj);
  instance.save(function(err){
    callback(err);
  });
};

这样的话 传入一个 MovieSchema是插入数据正常的 如果插入的是MovieSchema[]这样的一组的话 数据就插入异常

这个问题困惑我很长时间了

mongoose似乎没有batch save的方法。

如果你是array,就自己做个循环插入吧。

mongo 自带数据导入的。这个就没必要单独拿出来说了吧。。

不能批量save可以找其他方法呀。

例如model.js的 create方法皆可以批量处理数据的嘛

在这个帖子中,我们通过一个具体的例子来展示如何使用Node.js和Mongoose库,将JSON数据直接存入MongoDB数据库。这不仅简化了数据处理流程,也减少了代码量。

配置Mongoose

首先,确保你安装了mongooseexpress库:

npm install mongoose express --save

然后在你的Node.js项目中配置Mongoose:

const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test', { useNewUrlParser: true, useUnifiedTopology: true });

创建目录及文件

创建一个简单的Express应用,包含一个用于插入数据的API端点。

// app.js
const express = require('express');
const mongoose = require('mongoose');

const app = express();
app.use(express.json()); // 中间件,解析JSON请求体

mongoose.connect('mongodb://localhost/test', { useNewUrlParser: true, useUnifiedTopology: true });

const UserSchema = new mongoose.Schema({
    name: String,
    age: Number
});

const User = mongoose.model('User', UserSchema);

app.post('/users', (req, res) => {
    const user = new User(req.body); // 直接将JSON数据映射到User模型
    user.save()
        .then(savedUser => res.json(savedUser))
        .catch(err => res.status(500).json({ error: err }));
});

app.listen(3000, () => console.log('Server started on port 3000'));

插入数据

你可以通过Postman或任何HTTP客户端发送POST请求到/users端点来插入数据:

curl -X POST -H "Content-Type: application/json" -d '{"name":"John Doe", "age":30}' http://localhost:3000/users

查询数据

为了验证数据是否成功插入,我们可以添加一个GET请求来查询所有用户:

app.get('/users', async (req, res) => {
    try {
        const users = await User.find({});
        res.json(users);
    } catch (err) {
        res.status(500).json({ error: err });
    }
});

现在你可以在浏览器中访问http://localhost:3000/users来查看数据库中的用户列表。

总结

通过这个简单的例子,我们展示了如何使用Node.js、Express和Mongoose,将JSON数据直接存入MongoDB。这种设计不仅使数据处理变得更加直观,还减少了大量手动转换数据格式的工作。希望这对你理解和使用这些技术有所帮助。

回到顶部