Rumah > Soal Jawab > teks badan
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: "$销售时间" }
} }
]);
Soalan: Bagaimana untuk mencari harga jualan yang sepadan dengan masa jualan terakhir?
ringa_lee2017-05-02 09:25:33
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.