MongoDB的SQLite脚本

问题描述 投票:-3回答:1

我是MongoDB的新手。而且我需要帮助。我有一个带有SQLite的小项目(7个表和1个视图)。我需要在MongoDB上创建该项目,我正在使用Studio 3T,已经将SQLite表迁移到MongoDB集合,但是现在我需要进行(VIEW / TEST)测试该项目。请帮助如何使用MongoDB编写此SQL脚本。SQLITE:

enter image description here

MongoDB:

enter image description here

我想用MongoDB创建的SQLIte脚本:

CREATE VIEW rezultatas AS
    SELECT p.pavadinimas AS detales_pavadinimas,
        SUM(d.pagamintas_kiekis) AS pagamintas_kiekis,
        SUM(z.gamybos_islaidos) AS vidutine_kaina,
        STRFTIME('%m', d.pagaminimo_data) AS menuo,
        STRFTIME('%Y', d.pagaminimo_data) AS metai
    FROM detales d,
         zinynas z,
         produktas p
   WHERE (z.detale_id = p._id_) AND
         (d.detale_id = z.detale_id) AND
         (d.pagaminimo_data >= z.data_nuo) AND
        NOT EXISTS (
                SELECT *
                    FROM zinynas
                  WHERE (d.detale_id = detale_id) AND
                        (d.pagaminimo_data >= data_nuo) AND
                        (z.data_nuo < data_nuo)
        )
   GROUP BY p.pavadinimas,
            STRFTIME('%m', d.pagaminimo_data),
            STRFTIME('%Y', d.pagaminimo_data)
sql mongodb translate converters
1个回答
0
投票

由于缺乏方案,我不得不猜测一些事情,但是基本布局应该可以工作。

我们将使用$createView,并将这些参数用作输入:

db.createView('rezultatas', 'produktas', pipeline)

意味着我们创建视图的管道从produktas集合开始。

要使用的管道:

[
    { // match the documents from the zinyas collection.
        $lookup:
            {
                from: "zinynas",
                let: { produktas_id: "$_id" }, // i'm guessing its _id
                pipeline: [
                    { $match:
                            { $expr: { $eq: [ "$detale_id",  "$$produktas_id" ] }}
                    },
                ],
                as: "z"
            }
    },
    {
        $unwind: "$z"
    },
    {  // match the documents from the detales collection. only keep the one with maximum data_nuo value.
        $lookup:
            {
                from: "detales",
                let: { z_detale_id: "$z.detale_id", z_data_nuo: "$z.data_nuo" },
                pipeline: [
                    { $match:
                            {
                                $and: [
                                    { $expr: { $eq: [ "$detale_id",  "$$z_detale_id" ] }},
                                    { $expr: { $gte: [ "$pagaminimo_data", "$$z_data_nuo"]}}
                                ]
                            }
                    },
                    {
                        $sort: {
                            data_nuo: -1
                        }
                    },
                    {
                        $limit: 1
                    }
                ],
                as: "d"
            }
    },
    {
        $unwind: "$d"
    },
    {  // end up saving the fields we want.
        $group: {
            _id: { pavadinimas : "$pavadinimas", month: {$month: "$d.pagaminimo_data"}, year: {$year: "$d.pagaminimo_data"}},
            pagamintas_kiekis: {$sum: "$d.pagamintas_kiekis"},
            vidutine_kaina: {$sum: "$z.gamybos_islaidos"},
            month: {$first: {$month: "$d.pagaminimo_data"}},
            year: {$first: {$year: "$d.pagaminimo_data"}},
            detales_pavadinimas: {$first: "$pavadinimas"}
        }
    }
]
© www.soinside.com 2019 - 2024. All rights reserved.