MongoDB聚合可展开,匹配,组查询组合

时间:2020-05-12 06:46:05

标签: mongodb aggregate

这是我的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。

0 个答案:

没有答案