查询操作–单文档查询
无条件查询
db.集合名称.find()
db.集合名称.findOne()
有条件查询–find({query},{projection})
query:包裹查询条件
projection:包裹指定返回字段
单条件查询
- 等于:{field:value}
db.Order.find(
{
"activityId": 62
}
)
- 大于:{field:{$gt:value}}
db.Order.find(
{
"activityId": {
$gt: 60
}
}
)
- 大于等于:{field:{$gte:value}}
db.Order.find(
{
"activityId": {
$gte: 60
}
}
)
- 小于:{field:{$lt:value}}
db.Order.find(
{
"activityId": {
$lt: 60
}
}
)
- 小于等于:{field:{$lte:value}}
db.Order.find(
{
"activityId": {
$lte: 60
}
}
)
- 不等于:{field:{$ne:value}}
db.Order.find(
{
"activityId": {
$ne: 62
}
}
)
- 多值查询:{field:{$in:value}}
db.Order.find(
{
"activityId": {
$in: [62,57]
}
}
)
多条件查询
- and条件:{field1:value1,field2:value2}
db.Order.find(
{
"activityId": 57,"mobile":"18578603549"
}
)
- or条件:{$or:[{field1:value1},{field2:value2}]}
db.Order.find(
{
$or: [
{
"activityId": 57
},
{
"mobile": "18024523131"
}
]
}
)
- and和or联合使用:{$and:[{field1:value1},{field2:value2}],$or:[{field3:value3}]}
db.GroupBookingTaskMongo.find({
$and: [{
"activityId": {
$gt: 57
}
}, {
"mobile": "18024523131"
}],
$or: [{
"orderNo": "30122021113000003583419257"
}]
})
去重查询:distinct(field,query)
db.GroupBookingTaskDetailMongo.distinct("mobile",{
"taskId":89
})
分页查询:skip(m).limit(n)
db.GroupBookingTaskDetailMongo.find(
{
"taskId":89
}
).skip(3).limit(10)//跳过前3条数据,取10条数据
聚合查询:aggregate([pipeline])
pipeline:管道,常用关键字有:$match、$group、$project、$sort,可实现分组、统计、排序等复杂查询
- 写聚合查询语句时,需注意:
最好一步步执行,执行完第一步看会得到什么结果,再根据该结果补充下一个脚本
分组汇总–需求1:统计不同任务每个号码的参与次数(按任务id和号码分组)
思路:
1、先按条件查询$match
2、按字段分组$group
3、要显示哪些字段$project
db.Task.aggregate([
{
$match:{//条件查询
"validFlag":1,
"newFlag":0
}
},
{
$group:{//分组
_id:{//先按taskId分组,再按mobile分组
"taskId":"$taskId",
"mobile":"$mobile"
},
count:{$sum:1}
}
},
{
$project:{//显示哪些字段,$_id表示前面的查询结果中会输出$_id的集合
"_id":0,
"taskId":"$_id.taskId",
"mobile":"$_id.mobile",
"count":"$count"
}
},
{
$sort:{//排序
taskId:-1
}
}
])
分组汇总–需求2:统计不同任务的参与人数(同一个号码算一个)
思路:
1、先按条件查询$match
2、按taskId和号码分组$group
3、要展示哪些字段$project
4、再按taskId分组$group得到人数
5、要展示哪些字段$project
db.Task.aggregate([
{
$match:{//条件查询
"validFlag":1,
"newFlag":0
}
},
{
$group:{
_id:{
taskId:"$taskId",
mobile:"$mobile"
},
count:{$sum:1}
}
},
{
$project:{
_id:0,
taskId:"$_id.taskId",
mobile:"$_id.mobile",
count:"$count"
}
},
{
$group:{
_id:{
taskId:"$taskId"
},
count:{$sum:1}
}
},
{
$project:{
_id:0,
taskId:"$_id.taskId",
userCount:"$count"
}
}
])
连表查询–$lookup
db.Task.aggregate([
{
$lookup:{//左连接
from:"TaskDetail",//关联Task表
localField:"taskId",//Task表关联的字段
foreignField:"_id",//TaskDetail表关联的字段
as:"result"//返回数据所在的属性名称
}
},
{
$unwind:"$taskDetails"//将数组展开
}
])