网站备案信息查询接口,山东网站建设代理,手机网站开发目的,做的网站.如何在局域网内访问文章目录 介绍特点#xff1a;Mongoose 使用#xff1a;创建项目并安装#xff1a;连接到 MongoDB#xff1a;定义 Schema#xff1a;创建模型并操作数据库#xff1a;创建文档#xff1a;查询文档#xff1a;更新文档#xff1a;删除文档#xff1a;使用钩子#x… 文章目录 介绍特点Mongoose 使用创建项目并安装连接到 MongoDB定义 Schema创建模型并操作数据库创建文档查询文档更新文档删除文档使用钩子Hooks数据验证使用虚拟属性Virtuals设置选项 介绍 Mongoose 是一个 MongoDB 对象模型库ODM它为 Node.js 应用程序提供了一个直白、简洁和富有表现力的数据建模工具. 特点
Mongoose 通过定义模型Model这些模型对应于 MongoDB 中的集合Collection。Mongoose 通过定义结构Schema你可以指定集合中文档Document的结构和类型。Mongoose 提供了强大的数据验证机制确保在保存到数据库之前数据符合预定义的模式和规则。Mongoose 允许你在数据保存或查询之前或之后执行中间件这可以用来执行如数据加密、日志记录等操作。Mongoose 支持虚拟属性这些属性在 MongoDB 中不存储但可以在应用层使用常用于计算字段或隐藏某些字段。Mongoose 提供了多个生命周期钩子如 save、validate、index 等允许你在文档的生命周期中的特定点执行自定义代码。
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:123456localhost:8017/test?authSourceadmin)const mongoose require(mongoose)const connect async () {try {db await mongoose.connect(mongodb://root:123456localhost:8017/test?authSourceadmin)console.log(Connected to MongoDB)} catch (error) {console.log(error.message)}
}
// 调用
connect()定义 Schema 在这里使用 Schema 定义 MongoDB 集合的结构在这里我们定义一个用户结构 UserSchema 和地址结构(AddrSchema) 这里使用 default设置字段默认值使用select来设置在 find 和 findOne的返回结构中是否展示避免将密码等敏感字符暴露出接口 使用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:123456localhost:8017/test?authSourceadmin)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 和 validateBeforeSavecosnt schema new UserSchema({// ...},{ strict: true, typeKey: $type, validateBeforeSave: false }
)