是一种新的蜜蜂聚合框架。我正在尝试生成发票。
以下是我的数据
{ "_id" : ObjectId("5d9726f21b1307ad58a237e8"), "invoice_month" : 10, "summarynumberprice" : { "local_number_minutes_price" : NumberDecimal("0.2000"), "byprefix_number_price" : NumberDecimal("2.0000"), "bystate_number_price" : NumberDecimal("1.0000"), "byprefix_minutes_price" : NumberDecimal("0.0100"), "bystate_minutes_price" : NumberDecimal("0.0200"), "local_number_price" : NumberDecimal("4.0000"), "toll_free_number_price" : NumberDecimal("1.0000"), "toll_free_minutes_price" : NumberDecimal("2.0000"), "tollfree_qnty" : 3, "bystate_quantity" : 0, "local_qnty" : 0, "byprefix_qnty" : 1 }, "agency_invoice_number" : "AG-194-000004", "agency_id" : 194, "summary" : { "By-State" : { "price" : NumberDecimal("0.0200"), "minutes" : 0 }, "Local" : { "price" : NumberDecimal("0.2000"), "minutes" : 0 }, "By-prefix" : { "price" : NumberDecimal("0.0100"), "minutes" : 0 }, "Toll-Free" : { "price" : NumberDecimal("2.0000"), "minutes" : 5 } }, "invoicemonth" : "2019-10", "agency_name" : "newWysecenter Agency", "isodate" : ISODate("2019-10-04T16:33:10.465Z"), "agency_address" : "test", "totalcallduration" : { "By-prefix" : 0, "Toll-Free" : 5 }, "date" : "2019-10-04", "isodateutc" : ISODate("2019-10-04T11:03:10.465Z"), "invoice_year" : 2019, "number_pricing" : { "By-prefix" : 0, "Toll-Free" : NumberDecimal("1.0000") } }
{ "_id" : ObjectId("5d97289b1b1307aed3341e38"), "invoice_month" : 10, "summarynumberprice" : { "local_number_minutes_price" : NumberDecimal("0.2000"), "byprefix_number_price" : NumberDecimal("2.0000"), "bystate_number_price" : NumberDecimal("1.0000"), "byprefix_minutes_price" : NumberDecimal("0.0100"), "bystate_minutes_price" : NumberDecimal("0.0200"), "local_number_price" : NumberDecimal("4.0000"), "toll_free_number_price" : NumberDecimal("1.0000"), "toll_free_minutes_price" : NumberDecimal("2.0000"), "tollfree_qnty" : 3, "bystate_quantity" : 0, "local_qnty" : 0, "byprefix_qnty" : 1 }, "agency_invoice_number" : "AG-194-000004", "agency_id" : 194, "summary" : { "By-State" : { "price" : NumberDecimal("0.0200"), "minutes" : 0 }, "Local" : { "price" : NumberDecimal("0.2000"), "minutes" : 0 }, "By-prefix" : { "price" : NumberDecimal("0.0100"), "minutes" : 0 }, "Toll-Free" : { "price" : NumberDecimal("2.0000"), "minutes" : 1 } }, "invoicemonth" : "2019-10", "agency_name" : "newWysecenter Agency", "isodate" : ISODate("2019-10-04T16:40:13.967Z"), "agency_address" : "test", "totalcallduration" : { "By-prefix" : 0, "Toll-Free" : 1 }, "date" : "2019-10-04", "isodateutc" : ISODate("2019-10-04T11:10:13.967Z"), "invoice_year" : 2019, "number_pricing" : { "By-prefix" : 0, "Toll-Free" : NumberDecimal("1.0000") } }
聚合查询,IAM尝试构建的是以下
db.getCollection('agency_invoice_daily_194').aggregate([
{$unwind: '$summarynumberprice'},
{$match:{ 'invoicemonth':'2019-10'}},
{$group: {
_id:'$invoicemonth',
"name": { "$first": "$agency_name" },
"agency_address": { "$first": "$agency_address" },
"invoice_number": { "$first": "$agency_invoice_number" },
prefix: {$addToSet : {number:'$summarynumberprice.byprefix_qnty' ,price:'$summarynumberprice.byprefix_number_price' }},
state: {$addToSet : {number:'$summarynumberprice.bystate_quantity' ,price:'$summarynumberprice.bystate_number_price' }},
local: {$addToSet : {number:'$summarynumberprice.local_qnty' ,price:'$summarynumberprice.local_number_price' }},
tollfree: {$addToSet : {number:'$summarynumberprice.tollfree_qnty' ,price:'$summarynumberprice.toll_free_number_price' }},
tollfreeminutes: {$addToSet : {price:'$summary.Toll-Free.price' , sum :{"$sum":{"$sum": '$summary.Toll-Free.minutes'}} }}
}},
{
"$project": {
"_id": 0,
"agencyname": "$name","agency_name": 1, "agency_address": "$agency_address","invoice_number": "$invoice_number", "invoicemonth": "$_id","prefix": "$prefix","local": "$local" ,"state": "$state", "tollfree": "$tollfree",
"tollfreeminutes": "$tollfreeminutes"
}}
]).pretty();
查询的输出如下
{
"agencyname" : "newWysecenter Agency",
"agency_address" : "test",
"invoice_number" : "AG-194-000004",
"invoicemonth" : "2019-10",
"prefix" : [
{
"number" : 1,
"price" : NumberDecimal("2.0000")
}
],
"local" : [
{
"number" : 0,
"price" : NumberDecimal("4.0000")
}
],
"state" : [
{
"number" : 0,
"price" : NumberDecimal("1.0000")
}
],
"tollfree" : [
{
"number" : 3,
"price" : NumberDecimal("1.0000")
}
],
"tollfreeminutes" : [
{
"price" : NumberDecimal("2.0000"),
"sum" : 1
},
{
"price" : NumberDecimal("2.0000"),
"sum" : 5
}
]
}
我想在具有相同价格的免费电话分钟数下分组并添加“ sum”键值。这样,结果,tollfreeminutes数组变为
"tollfreeminutes" : [
{
"price" : NumberDecimal("2.0000"),
"sum" : 6
}
]
希望有人可以提供有价值的查询。