sql >> データベース >  >> NoSQL >> MongoDB

Mongodbで月と年の範囲でフィルタリングする方法

    自分で入手しました:

    db.bills.aggregate([
    {
        $match: {
            $expr: {
                $or: [
                    {
                        $and: [
                            {$eq: ["$year", FROMYEAR]},
                            {$eq: ["$year", TOYEAR]},
                            {$gte: ["$month", FROMMONTH},
                            {$lte: ["$month", TOMONTH},
                        ]
                    },
                    {
                        $and: [
                            {$eq: ["$year", FROMYEAR]},
                            {$lt: ["$year", TOYEAR]},
                            {$gte: ["$month", FROMMONTH]}
                        ]
                    },
                    {
                        $and: [
                            {$gt: ["$year", FROMYEAR]},
                            {$eq: ["$year", TOYEAR]},
                            {$lte: ["$month", TOMONTH]}
                        ]
                    },
                    {
                        $and: [
                            {$gt: ["$year", FROMYEAR]},
                            {$lt: ["$year", TOYEAR]}
                        ]
                    }
                ]
            }
        }
    },
    {
        $project: {
            "id": 1,
            "month": 1,
            "year": 1,
            "_id": 0
        }
    },
    ,
    {
        $sort: {
            "year": 1,
            "month": 1
        }
    }
    ]).toArray()
    

    1つ目は、クエリからfromYear、fromMonth、toYear、toMonthを抽出することです。次に、クエリ内の対応する位置に設定します。一致する範囲は4つあります。

    MinYear = $year = MaxYear ==========> MinMonth < $month < MaxMonth
    MinYear = $year < MaxYear ==========> MinMonth <= $month
    MinYear < $year = MaxYear ==========> $month <= MaxMonth
    MinYear < $year < MaxYear ==========> any $month
    

    結果は次のようになります。

    [
        {
            "id" : "BI_0010",
            "month" : 5,
            "year" : 2017
        },
        {
            "id" : "BI_0008",
            "month" : 3,
            "year" : 2018
        },
        {
            "id" : "BI_0001",
            "month" : 8,
            "year" : 2018
        }
    ]
    


    1. Mongoのドキュメント全体のサブドキュメントフィールドの平均

    2. Spring Bootアプリケーションで複数のmongodbデータベースを使用するにはどうすればよいですか?

    3. カスタムデシリアライズ

    4. Mongodb-addToSetを使用したアイテムの数