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

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

漂亮男人
漂亮男人

membalas semua(2)
小葫芦

Semoga ini membantu.

Sayangi MongoDB! Selamat Berseronok!

左手右手慢动作

Arahnya betul, tetapi pada masa ini tiada sintaks sedemikian untuk mendapatkan operasi "dokumen yang sepadan dengan masa jualan maksimum". Sebagai kelainan, kami mempunyai pengendali seperti $first/$last. Jika $first menjadi dokumen "masa jualan terakhir", bolehkah saya mendapatkannya? Untuk mencapai matlamat ini, anda boleh mengisih dokumen terlebih dahulu. Jadi kenyataan akhir sepatutnya seperti ini:

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

Untuk menjadi lebih cekap, $sort boleh dipercepatkan dengan pengindeksan Indeks berikut diperlukan:

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

Secara teorinya, dokumen yang diisih boleh digunakan oleh $group untuk mempercepatkan proses $group Malangnya, tiada pengoptimuman yang sepadan untuk titik ini dalam versi semasa. Untuk pengoptimuman yang sepadan, sila beri perhatian kepada status kemas kini Tiket SERVER-4507.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan