mongodb - 通过销售记录,按商品分组,如何计算销售量和最近一次销售的价格?
漂亮男人
漂亮男人 2017-05-02 09:23:33
0
2
728
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: "$销售时间" } 
   } }
]);

问题:如何求最后销售时间对应的售价?

漂亮男人
漂亮男人

répondre à tous(2)
小葫芦

J'espère que cela vous aidera.

J'adore MongoDB ! Amusez-vous !

左手右手慢动作

La direction est bonne, mais actuellement il n'existe pas de syntaxe de ce type pour obtenir le fonctionnement du "document correspondant au délai maximum de vente". En guise de nouveauté, nous avons des opérateurs comme $first/$last. Si $first s'avère être le document « dernière heure de vente », puis-je l'obtenir ? Pour atteindre cet objectif, vous pouvez d'abord trier les documents. La déclaration finale devrait donc ressembler à ceci :

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

Afin d'être plus efficace, $sort peut être accéléré par indexation. Les index suivants sont requis :

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

Théoriquement, les documents triés peuvent être utilisés par $group pour accélérer le processus de $group Malheureusement, la version actuelle n'a pas encore apporté les optimisations correspondantes sur ce point. Pour une optimisation correspondante, veuillez prêter attention à l'état de mise à jour du Ticket SERVER-4507.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal