分享我的工作、生活与心情,让自己变得丰富多彩!
博客 | 2022-01-10 14:35
Cnpm i egg-momgo-native --save
plugin.js中配置
exports.mongo = {
enable: true,
package: 'egg-mongo-native',
};config.default.js配置
config.mongo = {
client: {
host:"127.0.0.1",
port:"27017",
name:"test",
user:"",
password:"",
options:{},
}
}查询语句使用
var result = await this.app.mongo.find('users')
https://www.npmjs.com/package/egg-mongoose
配置
npm i egg-mongoose --=Mongodb:exports.mongoose =
Schema的建立数据表集合的映射新建app/module文件夹新增 order.js
module.exports = app => {const mongoose = app.mongoose;const Schema = mongoose.Schema;const OrderSchema = new Schema({
order_id: { type: String },
uid: { type: String },
trade_no: { type: String },
all_price: { type: Number },
all_num: { type: Number },
});return mongoose.model('Order', OrderSchema,'order'); //返回model
}Model的建立
增加数据
Let addResult=this.ctx.request.body; Let admin=new this.ctx.model.Order(addResult); admin.save();
修改数据
await this.ctx.model.Admin.updateOne({"_id":id},{
mobile,email,role_id})查询
Let id=this.ctx.request.query.id;
Let result=await this.ctx.model.Admin.find({"_id":id});删除数据
await this.ctx.model[model].deleteOne({"_id":id});数据预设
Mongoose 预定义模式修饰符,可以对我们增加的数据进行一些格式
Lowercase uppercase trim
Set()//建议使用mongoose,增加数据时匹配Sn:{
Type:stringTrim:true //是否去掉空格index:1 //索引set(parmas){if(parmas.indexOf('http://')==0){return 'http://'+parmas
}return parmas
}数据校验
Required
Max
Min
Enum 枚举类型
Match 增加的数据必须符合match正则
Maxlength 最大值
Minlength 最小值
Name:{
Type:stringRequired:true,
Min:0,
Max:150,
Enum:[0,1,2,3], 枚举类型
Match:/sn(.*)/i //必须sn开头}
自定义方法
validate:function(desc){return desc.length>=10;
}Mongoose中多对多的数据查询,和aggregate聚合管道
管道操作 | |
$project | 增加,删除,重命名字段 |
$match | 条件匹配,只满足条件的文档才能进入下一阶段 |
$limit | 限制结果的数量 |
$skip | 跳过文档的数量 |
$sort | 条件排序 |
$group | 条件组合结果 统计 |
$lookup | 用以引入其它集合的数据 |
sql和nosql对比
Where | $match |
group | $group |
having | $match |
select | $project |
Order by Limit | $sort $limit |
Sum() | $sum |
Count() | $sum |
join | $lookup |
常用表达式操作符 | Description |
$addToSet | 将文档指定字段的值去重 |
$max | 文档指定字段的最大值 |
$min | 文档指定字段的最小值 |
$sum | 文档指定字段求和 |
$avg | 文档指定字段求平均 |
$gt | 大于给定值 |
$lt | 小于给定值 |
$eq | 等于给定值 |
var result=await this.ctx.model.Admin.aggregate([{
$lookup:{from:'role',
localField:'role_id',
foreignField:'_id',as:'role'}
},
{
$match:{'role_id':10}
}
])聚合管道的使用
db.order.aggregate([
{
$project:{ trade_no:1, all_price:1 }
},
{
$match:{"all_price":{$gte:90}}
},
{
$sort:{"all_price":-1}
},
{
$skip:1}
])冉冉的365天 渝ICP备14008124号-2