Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 每个ID的MongoDB运行日期范围总和_Arrays_Json_Mongodb_Nosql - Fatal编程技术网

Arrays 每个ID的MongoDB运行日期范围总和

Arrays 每个ID的MongoDB运行日期范围总和,arrays,json,mongodb,nosql,Arrays,Json,Mongodb,Nosql,我有以下json文件(小样本),其中包含4个不同客户在不同日期的购买记录。我需要使用MongoDB/nosql来确定哪些客户在连续3天内至少总共购买了8次新产品 在这种情况下,客户ABC在2020-05-01至2020-05-03(连续3天)期间总共购买了32件商品。客户GHI在2020-07-28至2020-07-30(连续3天)期间也有20次购买。因此,我的输出应该只包含客户ABC和GHI。获取输出的代码是什么?非常感谢 {"cust_id":"ABC"

我有以下json文件(小样本),其中包含4个不同客户在不同日期的购买记录。我需要使用MongoDB/nosql来确定哪些客户在连续3天内至少总共购买了8次新产品

在这种情况下,客户ABC在2020-05-01至2020-05-03(连续3天)期间总共购买了32件商品。客户GHI在2020-07-28至2020-07-30(连续3天)期间也有20次购买。因此,我的输出应该只包含客户ABC和GHI。获取输出的代码是什么?非常感谢

{"cust_id":"ABC", "date":"2020-05-01", "new_purchase":2},
 {"cust_id":"ABC", "date":"2020-05-02", "new_purchase":16},
 {"cust_id":"ABC", "date":"2020-05-03", "new_purchase":14},
 {"cust_id":"ABC", "date":"2020-05-04", "new_purchase":0},
 {"cust_id":"ABC", "date":"2020-05-05", "new_purchase":5},
 {"cust_id":"DEF", "date":"2020-05-11", "new_purchase":3},
 {"cust_id":"DEF", "date":"2020-05-12", "new_purchase":0},
 {"cust_id":"DEF", "date":"2020-05-13", "new_purchase":0},
 {"cust_id":"DEF", "date":"2020-05-14", "new_purchase":0},
 {"cust_id":"DEF", "date":"2020-05-15", "new_purchase":1},
 {"cust_id":"GHI", "date":"2020-07-28", "new_purchase":0},
 {"cust_id":"GHI", "date":"2020-07-29", "new_purchase":3},
 {"cust_id":"GHI", "date":"2020-07-30", "new_purchase":17},
 {"cust_id":"GHI", "date":"2020-07-31", "new_purchase":0},
 {"cust_id":"GHI", "date":"2020-08-01", "new_purchase":1},
 {"cust_id":"JKL", "date":"2020-06-04", "new_purchase":7},
 {"cust_id":"JKL", "date":"2020-06-05", "new_purchase":0},
 {"cust_id":"JKL", "date":"2020-06-06", "new_purchase":0},
 {"cust_id":"JKL", "date":"2020-06-07", "new_purchase":0},
 {"cust_id":"JKL", "date":"2020-06-08", "new_purchase":0},
 {"cust_id":"JKL", "date":"2020-06-08", "new_purchase":2}

我假设这几天不会重复,这似乎是事实,只要你在最后的日期有一个打字错误


这个想法是:

  • 将日期拆分,并按年份和月份分组
  • 检查天数,我们每天测试
    day-1
    day+1
    是否存在。如果它们存在,我们将其作为数组添加到集合中,如下所示:集合:
    [[1,2,3],[2,3,4],[3,4,5]
  • 这个数组是
    $unwind
    ed,我们可以找到这些天的产品总数
  • 只有
    total>8
    匹配
  • 如果您希望每人只获得一个结果,请添加
    {$group:{{u id:“$id”}

  • 日期真的是一个字符串还是一个ISO日期?为什么你要问同样的问题四次?
        [
            {
                "$group" : {
                    "_id" : {
                        "cust_id" : "$cust_id",
                        "year" : {
                            "$arrayElemAt" : [
                                {
                                    "$split" : [
                                        "$date",
                                        "-"
                                    ]
                                },
                                0
                            ]
                        },
                        "month" : {
                            "$arrayElemAt" : [
                                {
                                    "$split" : [
                                        "$date",
                                        "-"
                                    ]
                                },
                                1
                            ]
                        }
                    },
                    "daysAndBuys" : {
                        "$push" : {
                            "day" : {
                                "$convert" : {
                                    "input" : {
                                        "$arrayElemAt" : [
                                            {
                                                "$split" : [
                                                    "$date",
                                                    "-"
                                                ]
                                            },
                                            2
                                        ]
                                    },
                                    "to" : "int"
                                }
                            },
                            "buys" : "$new_purchase"
                        }
                    }
                }
            },
            {
                "$addFields" : {
                    "sets" : {
                        "$map" : {
                            "input" : "$daysAndBuys",
                            "as" : "d",
                            "in" : {
                                "$cond" : [
                                    {
                                        "$and" : [
                                            {
                                                "$in" : [
                                                    {
                                                        "$add" : [
                                                            "$$d.day",
                                                            1
                                                        ]
                                                    },
                                                    "$daysAndBuys.day"
                                                ]
                                            },
                                            {
                                                "$in" : [
                                                    {
                                                        "$subtract" : [
                                                            "$$d.day",
                                                            1
                                                        ]
                                                    },
                                                    "$daysAndBuys.day"
                                                ]
                                            }
                                        ]
                                    },
                                    [
                                        "$$d.day",
                                        {
                                            "$add" : [
                                                "$$d.day",
                                                1
                                            ]
                                        },
                                        {
                                            "$subtract" : [
                                                "$$d.day",
                                                1
                                            ]
                                        }
                                    ],
                                    ""
                                ]
                            }
                        }
                    }
                }
            },
            {
                "$addFields" : {
                    "sets" : {
                        "$filter" : {
                            "input" : "$sets",
                            "as" : "s",
                            "cond" : {
                                "$ne" : [
                                    "$$s",
                                    ""
                                ]
                            }
                        }
                    }
                }
            },
            {
                "$unwind" : "$sets"
            },
            {
                "$addFields" : {
                    "daysAndBuys" : {
                        "$filter" : {
                            "input" : "$daysAndBuys",
                            "as" : "data",
                            "cond" : {
                                "$in" : [
                                    "$$data.day",
                                    "$sets"
                                ]
                            }
                        }
                    }
                }
            },
            {
                "$project" : {
                    "daysAndBuys" : 1,
                    "total" : {
                        "$sum" : "$daysAndBuys.buys"
                    }
                }
            },
            {
                "$match" : {
                    "total" : {
                        "$gte" : 8
                    }
                }
            }
        ]