find查询(此例基本包含了mongodb find查询所有的常用操作):
db.test.find(
// 范围 $gte $lte
hours: {$gte: "2019-01-01 00", $lt: "2019-01-01 01"},
// 多条件查询 并 $and
$and: [
// 模糊查询
code: /^.*02/i
// 多条件查询 或 $or
$or: [
// 不包含此条件 $not,使用正则表达式 $regex
code: {$not: {$regex: "air_.*"}}
// 多值查询 $in
code: {$in: ["1718", "1719", "1720"]}
// 如果同一字段未使用 $and $or 的情况下多条件查询,后一个条件会顶替掉前一个条件
code: "air_130",
//不等于 $ne
code: {$ne: "air_130"}
// 规定输出字段(find无法起别名,需用管道 aggregate)
code: 1,
hours: 1
// 在mongo中多条件的最后,多一个逗号不会报错
// 排序 sort(-1为倒序)
.sort(
hours: -1,
code: -1
// 查询条数 limit,跳过条数 skip,结果为倒数第三至十二条数据
.limit(10).skip(2)
// 计数(先limit再计数会冲突)
.count()
aggregate管道查询(此例基本包含了mongodb管道查询所有的常用操作):
db.test.aggregate([
// 查询条件
$match: {
// 条件1
$or: [
{hours: {$gte: "2019-09-01 00", $lte: "2019-09-01 00"}},
{hours: {$gte: "2019-09-03 00", $lte: "2019-09-03 02"}}
// 条件2
code: {$regex: ".*air_15.*"}
// 分组
$group: {
// 多字段分组,_id后是分组字段,分组字段可写为null来将所有结果聚合到一起
_id: {hours: "$hours", time: "$time"},
// 取第一个值
first_V_17: {$first: "$V_17"},
// 取最后一个值,作用于多个字段
last_data: {$last: {V_14: "$V_14",V_12: "$V_12"}},
// 取最大的一个值
max_V_16: {$max: "$V_16"},
// 取最小的一个值
min_V_12: {$min: "$V_12"},
// 取所有值组成数组,允许重复
any_V_18: {$push: "$V_18"},
// 取所有值组成数组,去除重复值
alone_V_18: {$addToSet: "$V_18"},
// 取平均值
avg_V_11: {$avg: "$V_11"},
// 求和
sum_V_11: {$sum: "$V_11"},
// 计数
number: {$sum: 1},
// 查询条件,对前面的查询结果再次过滤
$match: {
number: 7
// 排序
$sort: {
// 使用内嵌文档特定键值排序,需加引号
"_id.hours": 1
// 规定输出字段
$project: {
// 别名
hours: "$_id.hours",
time: "$_id.time",
// 无别名
first_V_17: 1,
last_data: 1,
max_V_16: 1,
min_V_12: 1,
any_V_18: 1,
alone_V_18: 1,
avg_V_11: 1,
sum_V_11: 1,
number: 1,
// 指定为0,即去除指定输出字段,不可与规定输出字段同一对象内使用
$project: {
_id: 0,
time: 0
// 查询条数
$limit: 4
// 跳过条数,管道中limit和skip的先后顺序会影响最后的输出条数,当前结果为3条
$skip: 1