千家信息网

node中mongooes的概念是什么

发表于:2024-11-21 作者:千家信息网编辑
千家信息网最后更新 2024年11月21日,这篇文章主要介绍"node中mongooes的概念是什么",在日常操作中,相信很多人在node中mongooes的概念是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答
千家信息网最后更新 2024年11月21日node中mongooes的概念是什么

这篇文章主要介绍"node中mongooes的概念是什么",在日常操作中,相信很多人在node中mongooes的概念是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"node中mongooes的概念是什么"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

在node中,mongooes是一个第三方模块,是一个对象文档模型(ODM)库,它对Node原生的MongoDB模块进一步的优化封装,可以通过操作对象模型来操作MongoDB数据库。

本教程操作环境:windows7系统、nodejs 12.19.0版,DELL G3电脑。

Mongoose

Mongoose是Nodejs的一个模块,这个模块可以操作MongoDB模块对数据库的操作

Mongooose是一个对象文档模型(ODM)库,它对Node原生的MongoDB模块进一步的优化封装,并提供了更多的功能。

Mongoose,是MongoDB的一个对象模型工具,是基于node-mongodb-native开发的MongoDB的nodejs驱动,也目前是Node.js操作 MongoDB的首选库。

Mongoose的好处

  • 可以为文档创建一个模式结构(约束)(Schema)

  • 可以对模型中的对象/文档进行验证

  • 数据可以通过类型转换为对象模型

  • 可以使用中间件来应用业务逻辑挂钩

  • 比Node原生的MongoDB驱动更容易

注:那么要使用它,首先你得装上node.js和mongodb。

mongoose安装

npm install mongoose

  安装成功后如下图:

  安装成功后,就可以通过 require('mongoose') 来使用!

连接字符串

  创建一个db.js

var mongoose = require('mongoose'),    DB_URL = 'mongodb://localhost:27017/mongoosesample';/** * 连接 */mongoose.connect(DB_URL);/**  * 连接成功  */mongoose.connection.on('connected', function () {        console.log('Mongoose connection open to ' + DB_URL);  });    /** * 连接异常 */mongoose.connection.on('error',function (err) {        console.log('Mongoose connection error: ' + err);  });     /** * 连接断开 */mongoose.connection.on('disconnected', function () {        console.log('Mongoose connection disconnected');  });

  调用node db.js执行就会看到输出如下图

  从代码中可以看出,监听了几个事件,并且执行触发了connected事件,这表示连接成功

  connection中不止有如上几个事件,关键看你想要监听哪个事件。

  其它事件可以自行查看:http://mongoosejs.com/docs/api.html#connection_Connection

  这是最简单的连接字符串,当然还有其它形式,比如:连接密码、数据库连接设置、集群方式连式等等,这里解释了,用着了时候自行查询API文档

  http://mongoosejs.com/docs/api.html#index-js

Schema

  schema是mongoose里会用到的一种数据模式,可以理解为表结构的定义;每个schema会映射到mongodb中的一个collection,它不具备操作数据库的能力

  我们先改造一下db.js,导出mongoose对象  

var mongoose = require('mongoose'),    DB_URL = 'mongodb://localhost:27017/mongoosesample';/** * 连接 */mongoose.connect(DB_URL);/**  * 连接成功  */mongoose.connection.on('connected', function () {        console.log('Mongoose connection open to ' + DB_URL);  });    /** * 连接异常 */mongoose.connection.on('error',function (err) {        console.log('Mongoose connection error: ' + err);  });     /** * 连接断开 */mongoose.connection.on('disconnected', function () {        console.log('Mongoose connection disconnected');  });    module.exports = mongoose;

  下面我们定义一个user的Schema,命名为user.js

 mongoose = require('./db.js'= UserSchema =     userpwd: {type: String},                            userage: {type: Number},                            logindate : { type: Date}

定义一个Schema就这么简单,指定字段名和类型

Schema Types内置类型如下:

  • String

  • Number

  • Boolean | Bool

  • Array

  • Buffer

  • Date

  • ObjectId | Oid

  • Mixed

Schema中还可以做一些常用事,后面再讲!

Model

  定义好了Schema,接下就是生成Model。

  model是由schema生成的模型,可以对数据库的操作

  我们对上面的定义的user的schema生成一个User的model并导出,修改后代码如下

/** * 用户信息 */ var mongoose = require('./db.js'),    Schema = mongoose.Schema;var UserSchema = new Schema({              username : { type: String },                    //用户账号    userpwd: {type: String},                        //密码    userage: {type: Number},                        //年龄    logindate : { type: Date}                       //最近登录时间 }); module.exports = mongoose.model('User',UserSchema);

常用数据库操作

  接下来创建一个test.js文件做一些常用操作演示。

  插入

  Model#save([fn])

var User = require("./user.js");/** * 插入 */ function insert() {     var user = new User({        username : 'Tracy McGrady',                 //用户账号        userpwd: 'abcd',                            //密码        userage: 37,                                //年龄        logindate : new Date()                      //最近登录时间        });    user.save(function (err, res) {            if (err) {            console.log("Error:" + err);        }        else {            console.log("Res:" + res);        }    });}insert();

  结果在robmongo工具中查看

  从图中可以看到插入成功! 

  更新

  Model.update(conditions, update, [options], [callback])

var User = require("./user.js");function update(){    var wherestr = {'username' : 'Tracy McGrady'};        var updatestr = {'userpwd': 'zzzz'};        User.update(wherestr, updatestr, function(err, res){         if (err) {            console.log("Error:" + err);        }        else {            console.log("Res:" + res);        }    })}update();

  根据用户名更新密码,执行后结果如图

  图中可以看出,密码更新成功!update方法基本可以满足所有更新!

  常用方法还有findByIdAndUpdate,这种比较有指定性,就是根据_id

  Model.findByIdAndUpdate(id, [update], [options], [callback])

var User = require("./user.js");function findByIdAndUpdate(){    var id = '56f2558b2dd74855a345edb2';        var updatestr = {'userpwd': 'abcd'};        User.findByIdAndUpdate(id, updatestr, function(err, res){            if (err) {            console.log("Error:" + err);        }        else {            console.log("Res:" + res);        }    })}findByIdAndUpdate();

  其它更新方法

  Model.findOneAndUpdate([conditions], [update], [options], [callback])      //找到一条记录并更新

  删除

  Model.remove(conditions, [callback])

var User = require("./user.js");function del(){    var wherestr = {'username' : 'Tracy McGrady'};        User.remove(wherestr, function(err, res){        if (err) {            console.log("Error:" + err);        }        else {            console.log("Res:" + res);        }    })}del();

  结果就不贴了,res中会返回是否成功以及影响的行数:{"ok":1,"n":1}

  其它常用方法还有:

  Model.findByIdAndRemove(id, [options], [callback])      

  Model.findOneAndRemove(conditions, [options], [callback])

  条件查询

  已先插入一些测试数据 。。

  Model.find(conditions, [fields], [options], [callback])

var User = require("./user.js");function getByConditions(){    var wherestr = {'username' : 'Tracy McGrady'};        User.find(wherestr, function(err, res){        if (err) {            console.log("Error:" + err);        }        else {            console.log("Res:" + res);        }    })}getByConditions();

  结果我就不展示了

  第2个参数可以设置要查询输出的字段,比如改成

var User = require("./user.js");function getByConditions(){    var wherestr = {'username' : 'Tracy McGrady'};    var opt = {"username": 1 ,"_id": 0};        User.find(wherestr, opt, function(err, res){        if (err) {            console.log("Error:" + err);        }        else {            console.log("Res:" + res);        }    })}getByConditions();

  输出只会有username字段,设置方法如上,1表示查询输出该字段,0表示不输出

  比如我要查询年龄范围条件应该怎么写呢?

  User.find({userage: {$gte: 21, $lte: 65}}, callback); //这表示查询年龄大于等21而且小于等于65岁

  其实类似的还有: 

  $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.count(conditions, [callback])

var User = require("./user.js");function getCountByConditions(){    var wherestr = {};        User.count(wherestr, function(err, res){        if (err) {            console.log("Error:" + err);        }        else {            console.log("Res:" + res);        }    })}getCountByConditions();

  res会输出数量,也可以传入条件做条件查询!

  根据_id查询

  Model.findById(id, [fields], [options], [callback])

var User = require("./user.js");function getById(){    var id = '56f261fb448779caa359cb73';        User.findById(id, function(err, res){        if (err) {            console.log("Error:" + err);        }        else {            console.log("Res:" + res);        }    })}getById();

  这个还是比较常用,要据ID得到数据!  

  模糊查询

var User = require("./user.js");function getByRegex(){    var whereStr = {'username':{$regex:/m/i}};        User.find(whereStr, function(err, res){        if (err) {            console.log("Error:" + err);        }        else {            console.log("Res:" + res);        }    })}getByRegex();

  上面示例中查询出所有用户名中有'm'的名字,且不区分大小写,模糊查询比较常用,正则形式匹配,正则方式就是javascript正则,用到的比较多!

  分页查询

var User = require("./user.js");function getByPager(){        var pageSize = 5;                   //一页多少条    var currentPage = 1;                //当前第几页    var sort = {'logindate':-1};        //排序(按登录时间倒序)    var condition = {};                 //条件    var skipnum = (currentPage - 1) * pageSize;   //跳过数        User.find(condition).skip(skipnum).limit(pageSize).sort(sort).exec(function (err, res) {        if (err) {            console.log("Error:" + err);        }        else {            console.log("Res:" + res);        }    })}getByPager();

  分页是用得比较多的查询,分页原理用过其它数据库的都知道,分页用到的函数和mysql的比较类似

  上面我用到sort(),这个是排序规则,就不单讲了!

其它操作

  其它还有比较多常用的

  索引和默认值

  再看看我对user.js这个schema的修改

/** * 用户信息 */var mongoose = require('./db.js'),    Schema = mongoose.Schema;var UserSchema = new Schema({              username : { type: String , index: true},                    //用户账号    userpwd: {type: String},                        //密码    userage: {type: Number},                        //年龄    logindate : { type: Date, default:Date.now}                       //最近登录时间});module.exports = mongoose.model('User',UserSchema);

  index :建索引

  default:默认值

  LBS地址位置

lbs : { type: Array, index: '2d', sparse: true }   //地理位置

  上面有介绍过很多基于LBS的条件查询,Schema中定义时如上

  LBS查询对于一些基于LBS应用会用得比较多。

  其它常用方法

  Model.distinct(field, [conditions], [callback])                  //去重

  Model.findOne(conditions, [fields], [options], [callback])             //查找一条记录

  Model.findOneAndRemove(conditions, [options], [callback])           //查找一条记录并删除

  Model.findOneAndUpdate([conditions], [update], [options], [callback])      //查找一条记录并更新

到此,关于"node中mongooes的概念是什么"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

查询 数据 范围 成功 常用 对象 数据库 方法 模型 用户 更新 字段 密码 条件 模块 输出 事件 年龄 文档 概念 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 钉钉网络安全志愿者证书 成都嗨百川网络技术有限公司 网络安全意识教育官网 国产数据库替换MySQL 数据库自增的英文 数据库技术创建学生基本信息表 在线数据库字段取名 数据库将某张表授权给用户 纳海网络技术有限公司 云服务器安装ssl证书有什么用 达梦数据库数据存储原理 北京互联网平台科技公司 局域网连接共享服务器 网络安全监督检查基础要素表 停车场计时计费管理服务器 个体户注册软件开发 天津常用软件开发哪家便宜 云服务器不能运行软件 买个服务器自己装数据库 自己组建一台服务器如何出租 新乡市荣耀网络技术 衡阳长沙会员管理软件开发 制作一个微信加人软件开发 粤智新消防怎么不能切换服务器 双sp网络安全 万达互联网科技应用公司招聘 欧冠篮球数据库排名 成都网络技术专业学校 魔兽世界电信和网通服务器 互联网科技兴农
0