mongodb - 透過銷售記錄,按商品分組,如何計算銷售量和最近一次銷售的價格?
漂亮男人
漂亮男人 2017-05-02 09:23:33
0
2
635
db.sales.insert({"商品":"上衣","销售时间":"2015-12-01 11:00","售价":1.3}); db.sales.insert({"商品":"上衣","销售时间":"2015-12-01 12:00","售价":1.4}); db.sales.insert({"商品":"裤子","销售时间":"2015-12-01 11:30","售价":2.3}); db.sales.insert({"商品":"裤子","销售时间":"2015-12-01 12:30","售价":2.4}); db.sales.insert({"商品":"鞋子","销售时间":"2015-12-01 11:00","售价":3.3}); db.sales.insert({"商品":"鞋子","销售时间":"2015-12-01 12:00","售价":3.4}); db.sales.insert({"商品":"鞋子","销售时间":"2015-12-01 12:30","售价":3.5});
db.sales.aggregate([ { $group: { _id: "$商品", "销售量":{$sum:1} , "最后销售时间": { $max: "$销售时间" } } } ]);

問題:如何求最後銷售時間對應的售價?

漂亮男人
漂亮男人

全部回覆 (2)
小葫芦

希望這有幫助。

愛 MongoDB!玩得開心!

    左手右手慢动作

    方向是對的,但是目前沒有這樣的語法去取「最大的銷售時間所對應的那個文件」這樣的操作。變通一下,我們有$first/$last这样的操作符。如果让$first剛好就是"最後銷售時間"那個文檔,是不是就可以取到了呢?為了達到這個目的,可以先對文件進行排序。所以最終的語句應該是這樣:

    db.sales.aggregate([ {$sort: {"商品": 1, "销售时间": -1}}, {$group: {_id: "$商品", "销售量": {$sum: 1}, "最后销售时间": {$first: "$销售时间"}, "最后售价": {$first: "$售价"}}} ]);

    為了效率更高,$sort可以用上索引來加速,需要以下索引:

    db.sales.createIndex({"商品": 1, "销售时间": -1})

    理論上,排序之後的文檔可以被$group利用而加速$group的進程,遺憾的是目前的版本中還沒有針對這點做相應的優化。對應的優化請關注Ticket SERVER-4507的更新狀態。

      最新下載
      更多>
      網站特效
      網站源碼
      網站素材
      前端模板
      關於我們 免責聲明 Sitemap
      PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!