在Nodejs中基于Mongoose对Mongodb进行CRUD(增删改查)

1 篇文章 0 订阅
1 篇文章 0 订阅

mongoose官网

安装mongoose

 npm install mongoose

开启数据库

mongod

可视化工具

// 可以通过可视化工具配合操作
// 工具名:MongoDB Compass Community
[工具链接](https://docs.mongodb.com/compass/current/install/)

连接数据库

const mongoose = require('mongoose');
mongoose.set('useCreateIndex', true);
// mongoose.set('debug', true);

const DB_NAME = 'demo';
const DB_URL = 'localhost:27017';

let dbPromise = new Promise((resolve, reject) => {
	// 使用模版字符串,防止在操作过程中出现错误
	// 数据库是demo
  mongoose.connect(`mongodb://${DB_URL}/${DB_NAME}`, {useNewUrlParser: true})

// 监听链接状态
  mongoose.connection.on('open', (err) => {
    if (err) {
      console.log(`位于${DB_URL}上的${DB_NAME}数据库连接失败`);
      reject(err)
    } else {
      console.log(`位于${DB_URL}上的${DB_NAME}数据库连接成功`);
      resolve()
    }
  })
});

如果Terminal 报(node:8278) DeprecationWarning: collection.ensureIndex is deprecated. Use createIndexes instead.这个警告,可以在引入mongoose之后使用mongoose.set('useCreateIndex', true)
mongoose.set('debug', true) 开启debug,可以在Terminal跟踪状态日志

定义模式

;(async () => {
  await dbPromise;

  var Schema = mongoose.Schema;

  var blogSchema = new Schema({
    title: {
      type: String,
      required: true, // 必须有
      unique: true // 唯一性
    },
    author: String,
    body: String,
    comments: [{body: String, data: Date}],
    date: {type: Date, default: Date.now},
    hidden: Boolean,
    gender: {
      type: Number,
      enum: [0, 1], // 枚举 代表此值只能是枚举里的任一值
      default: 0
    },
    meta: {
      votes: Number,
      favs: Number
    },
    hobbies: [String],
    info: {
      type: Schema.Types.Mixed // 接收所有类型
    },
    enable_flag: {
      type: String,
      default: 'Y'
    }
  });
// 集合是Blog 在mongodb里默认变成复数
  const Blog = mongoose.model('Blog', blogSchema);

// 增删改查操作写在这里
--->> 操作

})();

增加数据

  /**
   * 增加数据
   */
  const blog = new Blog({
    title: '测试22',
    author: '张三1',
    hidden: false
  });
// 若保存成功,则返回当前要保存数据的对象
  blog.save((err, ret) => {
    if (err) {
      console.log('保存失败')
    } else {
      console.log('保存成功');
      console.log(ret)
    }
  });

查询数据

/**
   * 查询数据
   */
// 查询所有 返回是一个数组 如果集合为空,则返回一个空数组
  Blog.find((err, ret) => {
    if (err) {
      console.log('查询失败')
    } else {
      console.log('查询成功');
      console.log(ret)
    }
  });

// 按条件查询 返回的是数组 若无匹配项,则返回空数组
  Blog.find({
    $or: [
      {
        author: '张三1'
      }, {
        title: '测试1'
      }
    ]
  }, {title: 1}, (err, ret) => { // 中间对象时可选参数,里面字段时在Schema定义的字段名,0代表不返回该字段,1代表返回该字段
    if (err) {
      console.log('查询失败')
    } else {
      console.log('查询成功');
      console.log(ret)
    }
  });

// 按条件查询 返回的是对象,且仅有一个对象 若无匹配项,则返回null
  Blog.findOne({
    title: '测试1'
  }, {author: 1, _id: 0}, (err, ret) => {
    if (err) {
      console.log('查询失败')
    } else {
      console.log('查询成功');
      console.log(ret)
    }
  });

// 按_id条件查询 返回的是一个对象 若无匹配项,则返回null
  Blog.findById('5d78a30d1eab6f21d3f5c92f', (err, ret) => {
    if (err) {
      console.log('查询失败')
    } else {
      console.log('查询成功');
      console.log(ret)
    }
  });

删除数据

 /**
   * 删除数据
   */
  // 只删除一组匹配项
  Blog.deleteOne({
    title: '测试1'
  }, (err, ret) => {
    if (err) {
      console.log('删除失败')
    } else {
      console.log('删除成功');
      console.log(ret)
    }
  });

//  删除所有符合的匹配项
  Blog.deleteMany({
    title: '测试1'
  }, (err, ret) => {
    if (err) {
      console.log('删除失败')
    } else {
      console.log('删除成功');
      console.log(ret)
    }
  });

更新数据

/**
   * 更新数据
   */
// 只更新查询到的第一组符合条件的文档
  Blog.updateOne({
    author: '张三1'
  }, {
    info: '222'
  }, (err) => {
    if (err) {
      console.log('更新失败')
    } else {
      console.log('更新成功');
      console.log(ret)
    }
  });

//  更新所有匹配项的文档
  Blog.updateMany({
    author: '张三1'
  }, {
    info: '223'
  }, (err, ret) => {
    if (err) {
      console.log('更新失败')
    } else {
      console.log('更新成功');
      console.log(ret)
    }
  });
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 安装依赖 安装`express`、`mongoose`、`body-parser`和`cors`: ``` npm install express mongoose body-parser cors --save ``` 2. 连接数据库 在`app.js`连接数据库: ```javascript const express = require('express'); const mongoose = require('mongoose'); const bodyParser = require('body-parser'); const cors = require('cors'); const app = express(); // 连接数据库 mongoose.connect('mongodb://localhost/test', { useNewUrlParser: true }); const db = mongoose.connection; db.on('error', console.error.bind(console, '连接错误:')); db.once('open', function() { console.log('连接成功'); }); app.use(bodyParser.json()); app.use(cors()); app.listen(3000, () => console.log('服务器已启动')); ``` 3. 定义模型 在`models`文件夹下创建`user.js`文件,定义用户模型: ```javascript const mongoose = require('mongoose'); const userSchema = new mongoose.Schema({ name: String, age: Number, gender: String, }); const User = mongoose.model('User', userSchema); module.exports = User; ``` 4. 增加数据 在`app.js`增加路由,实现增加用户功能: ```javascript const express = require('express'); const mongoose = require('mongoose'); const bodyParser = require('body-parser'); const cors = require('cors'); const User = require('./models/user'); const app = express(); // 连接数据库 mongoose.connect('mongodb://localhost/test', { useNewUrlParser: true }); const db = mongoose.connection; db.on('error', console.error.bind(console, '连接错误:')); db.once('open', function() { console.log('连接成功'); }); app.use(bodyParser.json()); app.use(cors()); // 增加用户 app.post('/users', (req, res) => { const user = new User({ name: req.body.name, age: req.body.age, gender: req.body.gender, }); user.save((err, user) => { if (err) { console.error(err); res.sendStatus(500); } else { res.json(user); } }); }); app.listen(3000, () => console.log('服务器已启动')); ``` 5. 询数据 在`app.js`增加路由,实现询用户功能: ```javascript const express = require('express'); const mongoose = require('mongoose'); const bodyParser = require('body-parser'); const cors = require('cors'); const User = require('./models/user'); const app = express(); // 连接数据库 mongoose.connect('mongodb://localhost/test', { useNewUrlParser: true }); const db = mongoose.connection; db.on('error', console.error.bind(console, '连接错误:')); db.once('open', function() { console.log('连接成功'); }); app.use(bodyParser.json()); app.use(cors()); // 增加用户 app.post('/users', (req, res) => { const user = new User({ name: req.body.name, age: req.body.age, gender: req.body.gender, }); user.save((err, user) => { if (err) { console.error(err); res.sendStatus(500); } else { res.json(user); } }); }); // 询用户 app.get('/users', (req, res) => { User.find((err, users) => { if (err) { console.error(err); res.sendStatus(500); } else { res.json(users); } }); }); app.listen(3000, () => console.log('服务器已启动')); ``` 6. 更新数据 在`app.js`增加路由,实现更新用户功能: ```javascript const express = require('express'); const mongoose = require('mongoose'); const bodyParser = require('body-parser'); const cors = require('cors'); const User = require('./models/user'); const app = express(); // 连接数据库 mongoose.connect('mongodb://localhost/test', { useNewUrlParser: true }); const db = mongoose.connection; db.on('error', console.error.bind(console, '连接错误:')); db.once('open', function() { console.log('连接成功'); }); app.use(bodyParser.json()); app.use(cors()); // 增加用户 app.post('/users', (req, res) => { const user = new User({ name: req.body.name, age: req.body.age, gender: req.body.gender, }); user.save((err, user) => { if (err) { console.error(err); res.sendStatus(500); } else { res.json(user); } }); }); // 询用户 app.get('/users', (req, res) => { User.find((err, users) => { if (err) { console.error(err); res.sendStatus(500); } else { res.json(users); } }); }); // 更新用户 app.put('/users/:id', (req, res) => { User.findByIdAndUpdate(req.params.id, { $set: { name: req.body.name, age: req.body.age, gender: req.body.gender, }, }, { new: true }, (err, user) => { if (err) { console.error(err); res.sendStatus(500); } else { res.json(user);

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值