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

网站的需求分析都有哪些内容项目计划书模板免费

网站的需求分析都有哪些内容,项目计划书模板免费,中国城市建设网,装修找客户去哪个网站Mongoose是Node.js 操作 MongoDB 的优雅解决方案 Mongoose 是一个基于 Node.js 的 MongoDB 对象建模工具,它为 Node.js 与 MongoDB 之间提供了一个高级抽象层,使开发者可以更便捷地操作 MongoDB。 1. 安装与基本设置 首先安装 Mongoose: …

Mongoose是Node.js 操作 MongoDB 的优雅解决方案

Mongoose 是一个基于 Node.js 的 MongoDB 对象建模工具,它为 Node.js 与 MongoDB 之间提供了一个高级抽象层,使开发者可以更便捷地操作 MongoDB。

1. 安装与基本设置

首先安装 Mongoose:

npm install mongoose

连接到 MongoDB 数据库:

const mongoose = require('mongoose');async function connectDB() {try {await mongoose.connect('mongodb://localhost:27017/mydatabase', {useNewUrlParser: true,useUnifiedTopology: true,useCreateIndex: true,useFindAndModify: false});console.log('Connected to MongoDB');} catch (error) {console.error('Error connecting to MongoDB:', error);process.exit(1);}
}connectDB();

2. 核心概念:Schema、Model 和 Document

Schema(模式)

定义数据结构和验证规则:

const mongoose = require('mongoose');
const { Schema } = mongoose;const userSchema = new Schema({name: {type: String,required: true,trim: true},email: {type: String,required: true,unique: true,lowercase: true,validate: {validator: (value) => {return /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(value);},message: 'Invalid email address'}},age: {type: Number,min: 1,max: 150},createdAt: {type: Date,default: Date.now}
});

Model(模型)

基于 Schema 创建数据模型:

const User = mongoose.model('User', userSchema);

Document(文档)

模型的实例,代表 MongoDB 中的一个文档:

const newUser = new User({name: 'John Doe',email: 'john@example.com',age: 30
});newUser.save().then(user => console.log('User saved:', user)).catch(error => console.error('Error saving user:', error));

3. 数据验证

Mongoose 提供内置和自定义验证器:

const productSchema = new Schema({name: {type: String,required: [true, 'Product name is required'],minlength: [3, 'Name must be at least 3 characters']},price: {type: Number,required: true,validate: {validator: (value) => value > 0,message: 'Price must be greater than 0'}},category: {type: String,enum: {values: ['electronics', 'clothing', 'books'],message: '{VALUE} is not a valid category'}}
});

4. 数据操作

创建文档
// 单个创建
User.create({ name: 'Alice', email: 'alice@example.com', age: 25 }).then(user => console.log('Created user:', user)).catch(error => console.error('Error creating user:', error));// 批量创建
User.insertMany([{ name: 'Bob', email: 'bob@example.com', age: 30 },{ name: 'Charlie', email: 'charlie@example.com', age: 35 }
]).then(users => console.log('Created users:', users)).catch(error => console.error('Error creating users:', error));
查询文档
// 查找所有用户
User.find().then(users => console.log('All users:', users)).catch(error => console.error('Error finding users:', error));// 按条件查找
User.findOne({ age: { $gte: 30 } }).then(user => console.log('User over 30:', user)).catch(error => console.error('Error finding user:', error));// 按 ID 查找
User.findById('6123456789abcdef12345678').then(user => console.log('User by ID:', user)).catch(error => console.error('Error finding user by ID:', error));// 高级查询
User.find().where('age').gte(25).lte(40).sort('-age').select('name email').limit(10).then(users => console.log('Filtered users:', users)).catch(error => console.error('Error filtering users:', error));
更新文档
// 按 ID 更新
User.findByIdAndUpdate('6123456789abcdef12345678',{ age: 31 },{ new: true, runValidators: true }
).then(updatedUser => console.log('Updated user:', updatedUser)).catch(error => console.error('Error updating user:', error));// 按条件更新
User.updateOne({ email: 'john@example.com' },{ $set: { name: 'John Smith' } }
).then(result => console.log('Update result:', result)).catch(error => console.error('Error updating user:', error));
删除文档
// 按 ID 删除
User.findByIdAndDelete('6123456789abcdef12345678').then(deletedUser => console.log('Deleted user:', deletedUser)).catch(error => console.error('Error deleting user:', error));// 按条件删除
User.deleteMany({ age: { $lt: 25 } }).then(result => console.log('Deleted users:', result.deletedCount)).catch(error => console.error('Error deleting users:', error));

5. 中间件(Middleware)

在文档操作前后执行自定义逻辑:

// 保存前的中间件
userSchema.pre('save', function(next) {// 对密码进行哈希处理if (this.isModified('password')) {this.password = bcrypt.hashSync(this.password, 10);}next();
});// 保存后的中间件
userSchema.post('save', function(doc, next) {console.log('User saved:', doc._id);next();
});// 查询后的中间件
userSchema.post('find', function(docs, next) {console.log(`Returned ${docs.length} users`);next();
});

6. 虚拟字段(Virtuals)

定义不存储在数据库中的计算字段:

userSchema.virtual('fullName').get(function() {return `${this.firstName} ${this.lastName}`;
});userSchema.virtual('isAdult').get(function() {return this.age >= 18;
});// 使用虚拟字段
User.findOne({ email: 'john@example.com' }).then(user => {console.log('Full name:', user.fullName);console.log('Is adult:', user.isAdult);}).catch(error => console.error('Error fetching user:', error));

7. 关联(Population)

处理文档间的关系:

// 定义作者模式
const authorSchema = new Schema({name: String,country: String
});// 定义书籍模式
const bookSchema = new Schema({title: String,author: {type: Schema.Types.ObjectId,ref: 'Author'}
});// 关联查询
Book.findOne({ title: 'Mongoose Guide' }).populate('author', 'name country -_id') // 选择要返回的字段.then(book => console.log('Book with author:', book)).catch(error => console.error('Error fetching book:', error));

8. 聚合(Aggregation)

执行复杂的数据处理:

User.aggregate([// 匹配年龄大于25的用户{ $match: { age: { $gt: 25 } } },// 按国家分组并计算每组的平均年龄和用户数{ $group: {_id: '$country',averageAge: { $avg: '$age' },count: { $sum: 1 }} },// 按平均年龄降序排序{ $sort: { averageAge: -1 } },// 限制结果数量{ $limit: 5 }
]).then(results => console.log('Aggregation results:', results)).catch(error => console.error('Error in aggregation:', error));

Mongoose 为 MongoDB 提供了强大而灵活的抽象层,使 Node.js 开发者能够更高效地处理数据库操作,同时保持代码的整洁和可维护性。通过合理使用 Schema、Model、验证、中间件等特性,可以构建出健壮的数据库层。


文章转载自:

http://sMYZusEQ.ggtgL.cn
http://1LwUtDCG.ggtgL.cn
http://ur8vbuHH.ggtgL.cn
http://PyTkjdQd.ggtgL.cn
http://7eM0tkFB.ggtgL.cn
http://8w0qRdlp.ggtgL.cn
http://MncG1K84.ggtgL.cn
http://e7S2z6G5.ggtgL.cn
http://9FLtm7rP.ggtgL.cn
http://4TpTuOMd.ggtgL.cn
http://ThySIo3S.ggtgL.cn
http://WOdpXwOr.ggtgL.cn
http://LgFOHFFe.ggtgL.cn
http://Ri0XyW3t.ggtgL.cn
http://cMbteHop.ggtgL.cn
http://rxQxcGOt.ggtgL.cn
http://mv6Ld0dn.ggtgL.cn
http://sGWkMupR.ggtgL.cn
http://R6UTykP0.ggtgL.cn
http://wZyxiMxh.ggtgL.cn
http://OIElR5TF.ggtgL.cn
http://EPAEtoXC.ggtgL.cn
http://ioPH0WwX.ggtgL.cn
http://pDx6Tlur.ggtgL.cn
http://JkuaJhQc.ggtgL.cn
http://sW69Ss36.ggtgL.cn
http://kc2dMP9b.ggtgL.cn
http://RLS99y9l.ggtgL.cn
http://hBBMGUxl.ggtgL.cn
http://qHEPRQsf.ggtgL.cn
http://www.dtcms.com/wzjs/621178.html

相关文章:

  • 建设部勘察设计网站大连金广建设集团网站
  • 北京网站大全鞍山58同城租房网
  • 烟台网站建设网站推广做我女朋友的表白句的网站
  • 用php内容做电商网站2008r2 iis网站验证码不显示
  • 关于网站建设好处文章南通网站
  • 网站建设 微信开发厦门公司建站
  • 浙江网站建设dyfwzx自建网站做电商
  • 网站开发中要做哪些东西自己做网站和凡科的区别
  • 职友集 一家做职业点评的网站网址大全软件下载
  • 上海华东民航机场建设公司网站集成墙板装修一平米多少钱
  • 网站的栏目设计网页设计公司婚庆网站模板下载
  • 高端网站改版顾问网站防恶意注册
  • 网站群发软件网站售后
  • 自建房设计网站推荐姓氏变logo设计免费生成
  • wordpress输入密码无法登陆seo公司网站推广
  • 如何宣传网站网站开发外包合同模板
  • 手机可以建网站嘛建站好吗wordpress免备案
  • 做网站推广的需要了解哪些知识seo新手教程
  • 响应式网站模板代码仿uehtml WordPress
  • 怎么做网站推广六安网站如何做延迟加载
  • 淘宝网站制作多少钱建设网站犀牛云
  • notepad做网站杭州高端网站设计
  • 上海网站建设设计公司排名wordpress rss 爬取
  • 自动建站网站系统域名苏州外贸网站建设制作方案
  • 众筹网站建设公司tp框架网站开发参考文献
  • 做网站补贴有没有个人做网站的
  • 茶网站建设方案php做听歌网站
  • 网站建设问卷调查wordpress查看访问者ip
  • 高校网站建设的优势和不足泰安网站建设个人工作室
  • 怎样做 网站做seowordpress 4.2 emoji