分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > IT知识

Practical Node.js (2018版) 第7章:Boosting Node.js and Mongoose

发布时间:2023-09-06 02:30责任编辑:赖小花关键词:jsNode

参考:(mongoose和mongodb模块的区别)https://www.jianshu.com/p/87bcf4fdb479

参考: mongoose官网(https://mongoosejs.com/docs/models.html)

参考: 英文:Boosting Node.js和MongoDB with Mongoose


简介:mongoose

Mongoose is a fully developed object document mapping (ODM) library for Node.js and MongoDB. 

ODM的概念对应sql的ORM,就是ruby on rails中的activerecord那因层。

activerecord包括migrations, Validations, associations, Query interface, 对应mvc框架中的Models。

ORM, Object-Relational Mappiing。

ODM的作用,定义数据库的数据格式schema, 然后通过它取数据,把数据库中的document映射成程序中的一个对象。这个对象有save, update的系列方法,有tilte, author等系列属性。

在调用这些方法时,odm会根据你调用时使用的条件,转化成mongoDb Shell语言,帮你发送出去。

自然,在程序内使用链式调用,比手写数据库语句更灵活也方便。

例子:

//先安装好MongoDb和Node.js$ npm install mongoose// getting-started.jsvar mongoose = require(‘mongoose‘);mongoose.connect(‘mongodb://localhost:27017/test‘);db.on(‘error‘, console.error.bind(console, "connection error"))db.once(‘open‘, function() { ?//当连接成功后,写Schema, model, 写实例并保存到数据库。})

在db.once内的例子1

var userSchema = new mongoose.Schema({ ?user: { ???username: String, ???password: ?String ?}})var User = mongoose.model(‘user‘, userSchema)var frank = new User({ ?user: { ???username: ‘Frank‘, ???password: ‘123456‘ ?}})frank.save((err, frank) => { ?console.log(‘save success!‘) ?console.log(frank.user)})

在db.once()的例子2

 ?//构建一个Schema ?var kittySchema = new mongoose.Schema({ ???name: String ?}); ?// 写一个方法 ?kittySchema.methods.speak = function () { ???var greeting = this.name ?????? "Meow name is " + this.name ?????: "I don‘t have a name"; ???console.log(greeting); ?} ?// 生成一个model ?var Kitten = mongoose.model(‘Kitten‘, kittySchema); ?// 实例化一个对象 ?var fluffy = new Kitten({ name: ‘fluffy‘ }); ?// 通过mongoose写入数据库 ?fluffy.save((err, fluffy) => { ???if (err) { ?????return console.error(err) ???} ???fluffy.speak() ?})

??:此时已经将fluffy对象保存到mongodb://localhost:27017/test的Kitten model内。

即将一个document,保存到test数据库的kittens collection中。

model自动创建了kittens这个collection。(自动添加了s)

??注意:此时mongoDb还没有创建kittens

在创建一个实例并执行save方法,test数据库才会创建了kittens collections和documents。

可以对比使用node.js mongodb driver的代码。

var MongoClient = require(‘mongodb‘).MongoClient, ???assert=require(‘assert‘);var url = ‘mongodb://localhost:27017/myproject‘;MongoClient.connect(url,function(err,db){ ???assert.equal(null,err); ???console.log("成功连接到服务器"); ???insertDocuments(db,function(){ ???????db.close(); ???}); ??// db.close();});var insertDocuments = function(db,callback){ ???var collection = db.collection(‘documents‘); ???collection.insertMany([ ???????{a:1}, ???????{a:2}, ???????{a:3} ???],function(err,result){ ???????assert.equal(err,null); ???????assert.equal(3,result.result.n); ???????assert.equal(3,result.ops.length); ???????console.log("成功插入3个文档到集合!"); ???????callback(result);
 ???});} 

上面代码是专为Node.js提供的驱动程序代码和mongDB shell语言类似。

而,用mongoose定位于使用关系型的数据结构schema,来构造你的app data。

它包括内置的类型构件, 验证, 查询,业务逻辑勾子和更多的功能,开箱即用out of the box!

mongoose把你使用Node.js驱动代码自己写复杂的验证,和逻辑业务的麻烦,简单化了。

mongoose建立在MongoDB driver之上,让程序员可以model 化数据。

二者各有优缺点:

mongoose需要一段时间的学习和理解。在处理某些特别复杂的schema时,会遇到一些限制。

但直接使用Node.js的驱动代码,在你进行数据验证时会写大量的代码,而且会忽视一些安全问题。


Practical Node.js (2018版) 第7章:Boosting Node.js and Mongoose

原文地址:https://www.cnblogs.com/chentianwei/p/10297827.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved