mongoose对MongoDB数据库的增删查改

栏目: 数据库 · 发布时间: 6年前

内容简介:专业课上,老师经常告诉我们,数据库的操作无非就是增删查改,即CURD,事实也正是如此,我们接下来看看mongoose操作no SQL数据库MongoDB的CURD。常见的查询条件

专业课上,老师经常告诉我们,数据库的操作无非就是增删查改,即CURD,事实也正是如此,我们接下来看看mongoose操作no SQL数据库 MongoDB 的CURD。

常见操作条件和API

常见的查询条件

$or 或关系

$nor 或关系取反

$gt 大于

$gte 大于等于

$lt 小于

$lte 小于等于

$ne 不等于

$in 在多个值范围内

$nin 不在多个值范围内

$all 匹配数组中多个值

$regex 正则,用于模糊查询

$size 匹配数组大小

$maxDistance 范围查询,距离(基于LBS)

$mod   取模运算

$near 邻域查询,查询附近的位置(基于LBS)

$exists 字段是否存在

$elemMatch 匹配内数组内的元素

$within 范围查询(基于LBS)

$box 范围查询,矩形范围(基于LBS)

$center 范围醒询,圆形范围(基于LBS)

$centerSphere 范围查询,球形范围(基于LBS)

$slice 查询字段集合中的元素(比如从第几个之后,第N到第M个元素

常见的查询API,详细请查看文档

Model.deleteMany() 删除所有文档集合的匹配条件 相当于 remove() 参数分别为:条件、操作、回调

Model.deleteOne() 删除匹配条件的文档集合的第一个文档 想当于 remove() 参数分别为:条件、回调

Model.find() 查询文档 参数分别为:条件、选择字段、操作、回调

Model.findById() 通过_id字段查询文档 相当于 findOne({ _id: id }) 参数分别为:id、选择字段、操作、回调

Model.findByIdAndDelete() 大多数情况使用它 通过_id字段查询文档并删除 相当于 findOneAndDelete({ _id: id }) 的快捷方式 参数分别为:id、操作、回调

Model.findByIdAndRemove() 通过_id字段查询文档并移除 相当于 findOneAndRemove({ _id: id }) 的快捷方式 参数分别为:id、操作、回调

Model.findByIdAndUpdate() 通过_id字段查询文档并更新 相当于 findOneAndUpdate({ _id: id }, ...) 参数分别为:id、更新字段、操作、回调

Model.findOne() 查询一个文档 参数分别为:条件、选择字段、操作、回调

Model.findOneAndDelete() 查询一个匹配的文档并删除 参数分别为:条件、操作、回调

Model.findOneAndRemove() 查询一个匹配的文档并移除 参数分别为:条件、操作、回调

Model.findOneAndUpdate() 查询一个匹配的文档并更新 参数分别为:条件、更新字段、操作、回调

Model.replaceOne() 覆盖一个已经存在的文档 相当于 update() 参数分别为:条件、更新字段、操作、回调

Model.updateMany() 更新多个已经存在的文档 相当于 update() 参数分别为:条件、更新字段、操作、回调

Model.updateOne() 更新一个已经存在的文档 相当于 update() 参数分别为:条件、更新字段、操作、回调

Model.remove() 移除所有匹配的文档 参数分别为:条件、回调

Model.update() 更新一个文档 参数分别为:条件、更新字段、操作、回调

关于 findByIdAndDelete()findByIdAndRemove() 的区别,请移除官方文档。

1.连接数据库

连接数据的详细文档请移步mongoose文档。

then回调模式

假设数据库连接地址为 mongodb://localhost:27017/TestDB

假设数据操作模型Model为:

// peopleModel.js
let mongoose = require('mongoose');

let Schema = mongoose.Schema;

let PeopleSchema = new Schema({
  name: String,
  age: Number,
  sex: Number,
  class: String
});

module.exports = mongoose.model('People', PeopleSchema, 'peopleCollection');
复制代码
const mongoose = require("mongoose");

var mongourl = 'mongodb://localhost:27017/TestDB';
mongoose.connect(mongourl).then(
  () => { 
      console.log('连接成功!')
  },
  err => {
      console.log('出错!', err);
  }
);
复制代码

on监听模式

let mongoose = require('mongoose');

let mongoURL = 'mongodb://localhost:27017/TestDB';
mongoose.connect(mongoURL);
mongoose.Promise = global.Promise;
let db = mongoose.connection;
db.on('error',console.error.bind(console, 'MongoDB connection error:'));
db.once('open', function() {
  // we're connected!
});
复制代码

2.查询数据

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

let mongoose = require('mongoose');
let People = require('../models/peopleModel');

router.get('/', function(req, res, next){
	
	// 需使用body-parse中间件获取参数
  let filters = { ...req.query };

  console.log(filters, 'filter');

	// 要查询的字段
  let query = {};

  if(filters.name){
    query.name = filters.name
  }
  if(filters.age){
  	//查询年龄大于age参数
    query.bookInfo = {$gt: filters.age}
  }

  People.find(query, null, { 
	limit: filters.pageSize, 
	skip: (filters.pageSize * filters.pageNum), 
	sort:'-createBy.age'
  }, (err, data) => { //查找所有
     if(err){
       res.status(500).json({ error: err });
     }else{
       res.json({ code: 1, data: data });
     }
   })

});

module.exports = router;
复制代码

当前端传相应的数据过来时,这边通过过滤和提取分页字段,利用 limitskip 操作来实现数据分页,也可以使用 mongoose-paginate 插件来简化分页操作,当前端传了对应的筛选字段过来,这边将按 对应字段查询结果,并按age值倒序返回。

2.添加数据

添加数据需要用到mongoose的 save() 方法

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

let mongoose = require('mongoose');
let People = require('../models/peopleModel');

router.post('/', function(req, res, next){
  const name = req.body.name,
    age = req.body.age,
    sex = req.body.sex,
    class = req.body.class;

  const newPeople = new People({
    name,
    age,
    sex,
    class
  });

  // 新增保存
  newPeople.save((err, data) => {
    if(err){
      res.status(500).json({ error: err });
    }else{
      res.json({ code: 1, data: data });
    }
  });
});

module.exports = router;

复制代码

3.修改数据

数据的修改需要用到 _id 字段,这个字段会在MongoDB数据库每增加一条新的记录时自动生成,也是唯一标识,同时,需要用到 findByIdAndUpdate() 方法来操作数据更新。

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

let mongoose = require('mongoose');
let People = require('../models/peopleModel');

router.post('/', function(req, res, next){
  const _id = req.body._id,
    name = req.body.name,
    age = req.body.age,
    sex = req.body.sex,
    class = req.body.class;

  const updateFields = {
    _id,
    name,
    age,
    sex,
    class
  };
  // 通过_id更新指定指字段
  People.findByIdAndUpdate({_id, _id}, updateFields, (err, data) => {
    if(err){
      res.status(500).json({ error: err });
    }else{
      res.json({ code: 1, data: data })
    }
  });
});

module.exports = router;
复制代码

4.删除数据

数据的删除涉及到单条数据的删除和批量删除,可以通过传单个id字符或者id字符串数组来实现不同的删除功能,需要用到 $in 条件操作符和 remove() 方法。

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

let mongoose = require('mongoose');
let People = require('../models/peopleModel');

router.post('/', function(req, res, next){
  let ids = req.body._id;
  let condition;
  if(Array.isArray(ids)){
    condition = {
      _id: { $in: ids }
    }
  }else{
    condition = {
      _id: ids
    }
  }

  People.remove(condition, (err, data) => {
    if(err){
      res.status(500).json({ error: err });
    }else{
      res.json({ code: 1, data: data })
    }
  })
});

module.exports = router;
复制代码

至此,mongoose对于MongoDB的增删查改操作案例都实现了,相信大家会对MongoDB的操作有个较好的入门。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Convergence Culture

Convergence Culture

Henry Jenkins / NYU Press / 2006-08-01 / USD 30.00

"Convergence Culture" maps a new territory: where old and new media intersect, where grassroots and corporate media collide, where the power of the media producer, and the power of the consumer intera......一起来看看 《Convergence Culture》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

URL 编码/解码
URL 编码/解码

URL 编码/解码

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具