这是我的JSON数据格式。在1、2上有不同_id和orders.type的几个数据。
{
"_id" : "20200112000400",
"orders" : [
{
"_id" : "20200112000403",
"type" : 2,
"price" : {
"basic" : 2600,
"additional" : 0
},
"state" : 15,
},
{
"_id" : "20200112000401",
"title" : "ABC",
"price" : {
"original" : 4000,
"sale" : 2000
},
"amount" : 1,
"type" : 1,
"state" : 15,
"commission" : 11,
},
{
"_id" : "20200112000402",
"title" : "ABC",
"price" : {
"original" : 11000,
"sale" : 8000
},
"amount" : 1,
"type" : 1,
"state" : 15,
"commission" : 11,
}
],
"state" : 4,
"date" : ISODate("2020-01-12T01:54:15.897Z"),
}
我只想汇总“ orders.type:1,orders.state 15” 我想按文档_id而不是orders._id
汇总订单数这是示例结果
{
"_id" : "20200112000400",
"orders" : [
{
"_id" : "20200112000401",
"title" : "ABC",
"price" : {
"original" : 4000,
"sale" : 2000
},
"amount" : 1,
"type" : 1,
"state" : 15,
"commission" : 11,
},
{
"_id" : "20200112000402",
"title" : "ABC",
"price" : {
"original" : 11000,
"sale" : 8000
},
"amount" : 1,
"type" : 1,
"state" : 15,
"commission" : 11,
}
],
"state" : 4,
"date" : ISODate("2020-01-12T01:54:15.897Z"),
},
{
"_id" : "20200112111411",
"orders" : [
{
"_id" : "20200112000406",
"title" : "ABC",
"price" : {
"original" : 4000,
"sale" : 2000
},
"amount" : 1,
"type" : 1,
"state" : 15,
"commission" : 11,
},
{
"_id" : "20200112000408",
"title" : "ABC",
"price" : {
"original" : 11000,
"sale" : 8000
},
"amount" : 1,
"type" : 1,
"state" : 15,
"commission" : 11,
}
],
"state" : 4,
"date" : ISODate("2020-01-12T01:54:15.897Z"),
}...
我的查询是这个
db.getCollection("Purchases").aggregate(
[
{
"$unwind" : {
"path" : "$orders"
}
},
{
"$match" : {
"orders.state" : 15.0,
"orders.type" : 1.0
}
},
{
"$group" : {
"_id" : "_id",
"orders" : {
"$push" : "$orders"
}
}
}
]
);
此查询按订单返回,但我想返回采购单据,而不要使用unwind,orders.type:要包含的2个数据 也许有可能,我想根据订单大小进行条件汇总。 例如,orders.type:1和文档_id组,$ match订单大小为1、2、3、4。