接手的新项目中用到了MongoDB,记录下用到的一些语句。
1、查询
根据gid、时间、类型查询
db.getCollection('cashierSaleOrder').find({
gid : "hy001",
tranTime : { "$gte" : ISODate("2018-05-01T00:00:00Z"), "$lte" : ISODate("2018-05-31T23:59:59Z") },
$or: [{orderType: "V"}, {orderType: "C"}]
});
2、聚合分组
match:匹配条件
group:_id分组条件
1)、查询商场下商户的交易笔数及交易金额
db.cashierSaleOrder.aggregate([
{ $match : {
gid : "wxjh001",
tranTime : { "$gte" : ISODate("2018-06-01T00:00:00Z"), "$lte" : ISODate("2018-06-06T23:59:59Z") },
$or: [{orderType: "V"}, {orderType: "C"}]
} },
{ $group : {
_id : "$mid",
num : {$sum : 1},
totalMoney : {$sum : "$money"}
}},
{ $sort : {
"_id" : 1}
}
]);
2)、分页查询
db.cashierSaleOrder.aggregate([
{ $match : {
gid : "wxjh001",
mid : "00210000001",
tranTime : { "$gte" : ISODate("2018-05-30T00:00:00Z"), "$lte" : ISODate("2018-06-09T23:59:59Z") },
orderType : { "$in" : ["V", "C"]}
} },
{ $group : {
_id : { $dateToString : { format : "%Y-%m-%d", date : "$tranTime"} },
num : {$sum : 1},
totalMoney : {$sum : '$money'}
}},
{ $sort : {
_id : -1
}},
{ $skip : 10}, // 先执行skip
{ $limit : 10} // 再执行limit
]);
3)、按照日期汇总,时间要+8小时
db.cashierSaleOrder.aggregate([
{ $match : {
gid : "hqjc001",
mid : "00210000288",
tranTime : { "$gte" : ISODate("2018-04-24T16:00:00Z"), "$lte" : ISODate("2018-04-25T15:59:59Z") },
orderType : { "$in" : ["V", "C"]}
} },
{ $group : {
_id : { $dateToString : { format : "%Y-%m-%d ", date : { $add: [ "$tranTime", 8*60*60000 ]} }},
num : {$sum : 1},
totalMoney : {$sum : '$money'}
}},
{ $sort : {
_id : -1
}}
]);
4)、先去重再汇总
db.cashierSaleOrder.aggregate([
{ $match : {
gid : "wxjh001",
tranTime : { "$gte" : ISODate("2018-06-01T16:00:00Z"), "$lte" : ISODate("2018-06-02T15:59:59Z") },
$or: [{orderType: "V"}, {orderType: "C"}]
} },
{ $group : {
_id : {"mid" : "$mid", "vsn" : "$vsn", "orderNo" : "$orderNo", "tranDate" : { $dateToString : { format : "%Y-%m-%d", date : "$tranTime"}} },
num : {$sum : 1},
totalMoney : {$sum : "$money"}
}},
{ $group : {
_id : "$_id.mid",
num : {$sum : 1},
totalMoney : {$sum : { $divide : ["$totalMoney", "$num"]}}
}},
{ $sort : {
"totalMoney" : -1}
}
]);
db.cashierSalePay.aggregate([
{ "$match" : {
"gid" : "wxjh001" ,
"tranTime" : { "$gte" : ISODate("2018-01-31T16:00:00Z"), "$lte" : ISODate("2018-07-31T15:59:59Z") }
}},
{ "$group" : {
"_id" : { "mid" : "$mid" , "vsn" : "$vsn" , "orderNo" : "$orderNo" ,
"tranDate" : { "$dateToString" : { "format" : "%Y-%m-%d" , "date" : "$tranTime" }}} ,
"num" : { "$sum" : 1},
"tranAmount" : { "$sum" : "$tranAmount"},
"aliPay" : { "$sum" : "$aliPay"},
"wxPay" : { "$sum" : "$wxPay"},
"cashPay" : { "$sum" : "$cashPay"},
"groupPay" : { "$sum" : "$groupPay"},
"cardPay" : { "$sum" : "$cardPay"},
"ticketPay" : { "$sum" : "$ticketPay"},
"takeoutPay" : { "$sum" : "$takeoutPay"},
"otherPay" : { "$sum" : "$otherPay"},
"bankPay" : { "$sum" : "$bankPay"}
}},
{ "$group" : {
"_id" : { $substr : [ "$_id.mid", 0, 4 ] },
"num" : { "$sum" : 1},
tranAmount : {$sum : { $divide : ["$tranAmount", "$num"]}},
aliPay : {$sum : { $divide : ["$aliPay", "$num"]}},
wxPay : {$sum : { $divide : ["$wxPay", "$num"]}},
cashPay : {$sum : { $divide : ["$cashPay", "$num"]}},
groupPay : {$sum : { $divide : ["$groupPay", "$num"]}},
cardPay : {$sum : { $divide : ["$cardPay", "$num"]}},
ticketPay : {$sum : { $divide : ["$ticketPay", "$num"]}},
takeoutPay : {$sum : { $divide : ["$takeoutPay", "$num"]}},
otherPay : {$sum : { $divide : ["$otherPay", "$num"]}},
bankPay : {$sum : { $divide : ["$bankPay", "$num"]}}
}}
]);
5)、先去重,再显示列表,再获取list,pays.get(0)为cashierSalePay
db.cashierSalePay.aggregate([
{ "$match" : {
"gid" : "hzgl001" ,
mid : "05710000102",
"tranTime" : { "$gte" : ISODate("2018-06-18T16:00:00Z"), "$lte" : ISODate("2018-06-19T15:59:59Z") }
}},
{ "$group" : {
"_id" : { "mid" : "$mid" , "vsn" : "$vsn" , "orderNo" : "$orderNo" ,
"tranDate" : { "$dateToString" : { "format" : "%Y-%m-%d" , "date" : "$tranTime" }}} ,
"pays" : { $push : "$$ROOT"}
}},
{ "$sort" : {
"_id.tranDate" : -1}
}
]);