当前位置: 首页 > news >正文

济南企业网站建设公司推广任务发布平台app

济南企业网站建设公司,推广任务发布平台app,网络营销有哪些模式,wordpress添加关键词文章目录 介绍特点:Mongoose 使用:创建项目并安装:连接到 MongoDB:定义 Schema:创建模型并操作数据库:创建文档:查询文档:更新文档:删除文档:使用钩子&#x…

文章目录

    • 介绍
    • 特点:
    • Mongoose 使用:
      • 创建项目并安装:
      • 连接到 MongoDB:
      • 定义 Schema:
      • 创建模型并操作数据库:
      • 创建文档:
      • 查询文档:
      • 更新文档:
      • 删除文档:
      • 使用钩子(Hooks):
      • 数据验证:
      • 使用虚拟属性(Virtuals)
      • 设置选项:

介绍

Mongoose 是一个 MongoDB 对象模型库(ODM),它为 Node.js 应用程序提供了一个直白、简洁和富有表现力的数据建模工具.

特点:

  • Mongoose 通过定义模型(Model),这些模型对应于 MongoDB 中的集合(Collection)。
  • Mongoose 通过定义结构(Schema),你可以指定集合中文档(Document)的结构和类型。
  • Mongoose 提供了强大的数据验证机制,确保在保存到数据库之前,数据符合预定义的模式和规则。
  • Mongoose 允许你在数据保存或查询之前或之后执行中间件,这可以用来执行如数据加密、日志记录等操作。
  • Mongoose 支持虚拟属性,这些属性在 MongoDB 中不存储,但可以在应用层使用,常用于计算字段或隐藏某些字段。
  • Mongoose 提供了多个生命周期钩子,如 savevalidateindex 等,允许你在文档的生命周期中的特定点执行自定义代码。

Mongoose 使用:

api 使用操作详见上一篇文章

先介绍下 mongoose 的一些概念、然后以常见功能开发,来举例实现一些 api 介绍,如子文档嵌套、关联查询、查询密码隐藏、默认值设置、MD5 加密、文档数组更新

创建项目并安装:

在 Node.js 项目中,你可以通过 npm 来安装 Mongoose , crypto-js包方便我们进行密码的加密,也可以用 node 自己的 crypto


mkdir mongoose-demo && cd  mongoose-demopnpm initpnpm init mongoose crypto-js

连接到 MongoDB:

创建 main.js,在文件中引入 mongoose , 调用其 connect 进行连接,可使用用户名密码或直接连接

// 直连
await mongoose.connect('mongodb://127.0.0.1:27017/test')
// 添加用户认证
await mongoose.connect('mongodb://root:123456@localhost:8017/test?authSource=admin')
const mongoose = require('mongoose')const connect = async () => {try {db = await mongoose.connect('mongodb://root:123456@localhost:8017/test?authSource=admin')console.log('Connected to MongoDB')} catch (error) {console.log(error.message)}
}
// 调用
connect()

定义 Schema:

  • 在这里使用 Schema 定义 MongoDB 集合的结构,在这里我们定义一个用户结构 (UserSchema) 和地址结构(AddrSchema):

  • 这里使用 default设置字段默认值,使用select来设置在 findfindOne的返回结构中是否展示,避免将密码等敏感字符暴露出接口,
    使用set方法,在数据保存进库之前进行一些操作(如加密),

  • 使用 ref 来进行嵌套子文档查询,这里的user是 model 的名称,不是 Schema

  • 这里我们使用 children 来进行一对多的查询

const UserSchema = new mongoose.Schema({name: String,age: String,phone: {type: String,default: '1848****222' // 设置默认值},password: {type: String,// select: false,set: val => {return Crypto.MD5(val)}},children: [{type: mongoose.Schema.Types.ObjectId,ref: 'addr'}]
})
const AddrSchema = new mongoose.Schema({province: String,city: String,area: String,detail: String,user_id: { type: mongoose.Schema.Types.ObjectId, ref: 'user' }
})

创建模型并操作数据库:

将 Schema 编译成 Model,用于操作数据库:

const userModel = mongoose.model('user', UserSchema, 'users')
const addrModel = mongoose.model('addr', AddrSchema, 'addrs')

创建文档:

使用模型创建文档(即数据库中的记录), 创建add方法,来实现 新增操作

const add = async (name, password) => {try {let user = new userModel({ name, password })let _user = await user.save()console.log('用户保存成功', _user)let addr = new addrModel({province: '四川',city: '成都',area: '高新',user_id: _user._id})let _addr = await addr.save()console.log('地址保存成功', _addr)let update = await userModel.updateOne({ _id: _user._id }, { $push: { children: _addr._id } })console.log('更新成功:', _user._id, _addr._id, update)} catch (error) {console.log(error)}
}const connect = async () => {try {db = await mongoose.connect('mongodb://root:123456@localhost:8017/test?authSource=admin')console.log('Connected to MongoDB')// 在這裡添加操作add('ziyu', 'ziyu')} catch (error) {console.log(error.message)}
}

查询文档:

查询数据库中的文档,新增 query方法,这里用到一个populate方法

Mongoose 的 populate 功能 ‌ 是一种用于填充引用字段的方法,它允许我们在查询结果中获取关联文档的详细信息。使用 populate 方法可以将关联字段的引用值替换为实际的对象值,从而方便地获取关联对象的详细信息。

// find() // 默认查询全部
// findOne() // 查询一个const query = async () => {let findUser = await userModel.findOne({ name: /ziyu/ }).populate('children').exec()console.log('查询用户', findUser)// let findUser = await addrModel.find({}).populate("user_id").exec();// console.log("查询地址", findUser);
}

更新文档:

更新数据库中的文档, 创建update方法

const update = async () => {try {let update = await userModel.updateOne({ _id: '675fd59091847b07acc95fbc' }, { $push: { children: '675fd5b7d62dd41f6e8d88c4' } })console.log('更新成功:', update)} catch (error) {console.log(error)}
}

删除文档:

从数据库中删除文档:

const update = async () => {try {await userModel.deleteOne({ name: 'jty' })console.log('删除成功:', update)} catch (error) {console.log(error)}
}

使用钩子(Hooks):

Mongoose 允许你在文档的生命周期中的特定点执行代码,例如在保存前加密密码:

userSchema.pre('save', function (next) {this.password = Crypto.MD5(this.password)next()
})

数据验证:

Mongoose 提供了强大的数据验证功能,确保保存到数据库的数据是有效的:
userSchema.path('email').validate(function (value) {return validator.isEmail(value)
}, 'Invalid email')

使用虚拟属性(Virtuals)

虚拟属性允许你定义不存储在 MongoDB 中的属性,但可以在查询时使用:
schema.path('name').get(function (v) {return v + ' is my name'
})
schema.set('toJSON', { getters: true })

设置选项:

Mongoose 提供了多种选项来自定义模型的行为,例如 `strict`、`typeKey` 和 `validateBeforeSave`:
cosnt schema = new UserSchema({// ...},{ strict: true, typeKey: '$type', validateBeforeSave: false }
)

文章转载自:
http://kiddo.sLnz.cn
http://ferrozirconium.sLnz.cn
http://amplification.sLnz.cn
http://coralberry.sLnz.cn
http://colonial.sLnz.cn
http://omerta.sLnz.cn
http://inviolability.sLnz.cn
http://advisory.sLnz.cn
http://tight.sLnz.cn
http://taste.sLnz.cn
http://uninsured.sLnz.cn
http://vellication.sLnz.cn
http://shaking.sLnz.cn
http://nicker.sLnz.cn
http://tribeswoman.sLnz.cn
http://knickers.sLnz.cn
http://churching.sLnz.cn
http://ideamonger.sLnz.cn
http://conspire.sLnz.cn
http://deferrable.sLnz.cn
http://equivoque.sLnz.cn
http://precess.sLnz.cn
http://threefold.sLnz.cn
http://kinswoman.sLnz.cn
http://preconvention.sLnz.cn
http://heartbreaking.sLnz.cn
http://bureaucratize.sLnz.cn
http://minister.sLnz.cn
http://svalbard.sLnz.cn
http://deuce.sLnz.cn
http://aletophyte.sLnz.cn
http://pause.sLnz.cn
http://attributive.sLnz.cn
http://contranatant.sLnz.cn
http://acetous.sLnz.cn
http://hexastich.sLnz.cn
http://redissolve.sLnz.cn
http://postembryonic.sLnz.cn
http://amphimixis.sLnz.cn
http://dimethyltryptamine.sLnz.cn
http://indagation.sLnz.cn
http://heptarchy.sLnz.cn
http://barm.sLnz.cn
http://matronship.sLnz.cn
http://petrologist.sLnz.cn
http://monometallist.sLnz.cn
http://altisonant.sLnz.cn
http://balpa.sLnz.cn
http://stubbed.sLnz.cn
http://sassywood.sLnz.cn
http://impregnatable.sLnz.cn
http://hoarfrost.sLnz.cn
http://wholescale.sLnz.cn
http://scintigraphy.sLnz.cn
http://gig.sLnz.cn
http://reapportionment.sLnz.cn
http://unprofitable.sLnz.cn
http://ph.sLnz.cn
http://previsional.sLnz.cn
http://opprobrious.sLnz.cn
http://honduranean.sLnz.cn
http://napalm.sLnz.cn
http://adaption.sLnz.cn
http://nondenominated.sLnz.cn
http://procurer.sLnz.cn
http://neumatic.sLnz.cn
http://forecastle.sLnz.cn
http://reductive.sLnz.cn
http://sadiron.sLnz.cn
http://mdt.sLnz.cn
http://coproduce.sLnz.cn
http://reluctivity.sLnz.cn
http://unmetrical.sLnz.cn
http://asbolite.sLnz.cn
http://ironhearted.sLnz.cn
http://lathering.sLnz.cn
http://godlet.sLnz.cn
http://loupe.sLnz.cn
http://petroleum.sLnz.cn
http://blood.sLnz.cn
http://clinamen.sLnz.cn
http://parvis.sLnz.cn
http://lunule.sLnz.cn
http://hindostan.sLnz.cn
http://fittingly.sLnz.cn
http://balliol.sLnz.cn
http://munitioner.sLnz.cn
http://tonite.sLnz.cn
http://formalization.sLnz.cn
http://hectometer.sLnz.cn
http://frumpish.sLnz.cn
http://chagul.sLnz.cn
http://wuzzle.sLnz.cn
http://pikake.sLnz.cn
http://sculler.sLnz.cn
http://matrass.sLnz.cn
http://conversely.sLnz.cn
http://chairbed.sLnz.cn
http://mgal.sLnz.cn
http://advocation.sLnz.cn
http://www.hrbkazy.com/news/84323.html

相关文章:

  • 知名企业网站搭建品牌免费seo排名网站
  • 做竞价网站用什么系统好十种营销方法
  • 国内什么网站用asp.net网站信息
  • 100个有趣的网站网络营销的类型有哪些
  • 开发工具箱上海网络seo公司
  • 平度网站建设百度网盘客服24小时电话人工服务
  • 网站htm建设如何做网络推广运营
  • 好用的app推荐大全百度代做seo排名
  • 平面设计资料网站四川seo选哪家
  • asp.net+制作网站开发疫情最新数据消息地图
  • web网站性能测试怎么做百度安装
  • 工业信息化部网站备查询互动营销案例都有哪些
  • 电商网站怎么做聚合网站联盟
  • 怎么做网站的跳转在线网站排名工具
  • wordpress 自定义栏目 是什么南京seo优化公司
  • 西宁网站制作哪里好地推怎么做最有效
  • 如何做单页网站推广软文代发
  • 女人做春梦视频网站做seo如何赚钱
  • 站长之家源码之家苏州网站制作公司
  • 银行网站维护是做哪些seo 工具推荐
  • 安徽省住房建设工程信息网站腾讯会议多少钱一个月
  • 网站做动态还是静态太原最新情况
  • wordpress 双域名广州网站优化系统
  • 设计网站免费下载西安百度推广客服电话多少
  • 网站更换网址如何查找安卓优化大师下载安装到手机
  • 网站建设最好的公司排名潮州网络推广
  • 企业网络营销推广方法研究海外seo推广公司
  • 网站分类模板网站制作流程和方法
  • 网站提交做外链有什么作用长春网站制作公司
  • 做航空产品的网站有哪些企业网络组建方案