【工作笔记】MongoDB查询语句

接手的新项目中用到了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}
    }
]);

 

你可能感兴趣的:(后端,MongoDB)