序:
1、这篇博文主要记录博主用egg对mongo一些操作
查询
moogodb操作
db.getCollection("a_boss").find({"_id":ObjectId("62fc9ee9f1834a147c001ab4")})
egg操作
m.ctx.model.ABoss.find({"_id":"62fc9ee9f1834a147c001ab4"})
新增
egg操作
m.ctx.model.ABoss.create([{title: 'MongoDB 教程',
description: 'MongoDB 是一个 Nosql 数据库',
by: '菜鸟教程',
url: 'http://www.runoob.com',
tags: ['mongodb', 'database', 'NoSQL'],
likes: 100
},
{title: '222',
description: 'MongoDB 是一个 Nosql 数据库',
by: '菜鸟教程',
url: 'http://www.runoob.com',
tags: ['mongodb', 'database', 'NoSQL'],
likes: 100
}])
moogodb 多行操作
db.getCollection("a_boss").insertMany([{title: 'MongoDB 教程',
description: 'MongoDB 是一个 Nosql 数据库',
by: '菜鸟教程',
url: 'http://www.runoob.com',
tags: ['mongodb', 'database', 'NoSQL'],
likes: 100
},
{title: '222',
description: 'MongoDB 是一个 Nosql 数据库',
by: '菜鸟教程',
url: 'http://www.runoob.com',
tags: ['mongodb', 'database', 'NoSQL'],
likes: 100
}])
删除
egg
moogodb
db.getCollection("a_boss").remove({title:"222"})
聚合查询
db.getCollection("a_boss").aggregate({
"$facet": {
"total": [{
"$match": {
"createdAt": {
"$gte": new ISODate("2022-08-17 02:18:49"),//egg里得改成new Date("2022-08-17 02:18:49")
"$lte": new ISODate("2022-08-17 07:18:49")
}
}
}, {
"$count": "total"
}],
"data": [{
"$match": {
"createdAt": {
"$gte": new ISODate("2022-08-17 02:18:49"),
"$lte": new ISODate("2022-08-17 07:18:49")
}
}
}, {
"$sort": {
"createdAt": - 1
}
}, {
"$skip": 0
}, {
"$limit": 10
}]
}
})
条件 or and 查询
or 满足一个条件就可以
db.getCollection("a_boss").find({$or: [
{title: "1111"},
{title: "3333"}
]})
and 数组里条件都要满足
db.getCollection("a_boss").find({$and: [
{title: "1111"},
{name: "小明"}
]})
$unwind
拆分数组,方便分组$group统计用
原来数据如图
$unwind处理完后再查询变成3条数据
$group
在上面案例的基础上,我们在用分组和求和效果如下
放开$match的_id限制条件
代码如下
db.getCollection("a_boss").aggregate([
{
$match:{
createdAt: {
$gte: ISODate("2022-08-22 00:00:00"),
$lte: ISODate("2022-08-28 23:59:59")
}
},
},
{
$project:{
"_id":1,
"skillArr":1,
"skills":1
},
},
{
$unwind:"$skillArr"
},
{
$group:{
"_id":"$skillArr",
sum:{
$sum:1
}
}
}
])
执行效果如下