sql - SQLite 脚本到 MongoDB
问题描述
我是 MongoDB 的新手。我需要帮助。我有一个带有 SQLite 的小项目(7 个表和 1 个视图)。我需要在 MongoDB 上制作这个项目,我正在使用 Studio 3T,我已经将 SQLite 表迁移到 MongoDB 集合,但现在我需要制作 (VIEW/TEST) 来测试这个项目。请帮助如何用 MongoDB 编写这个 SQL 脚本。 SQLITE:
MongoDB:
我想用 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)
解决方案
由于缺乏方案,我不得不猜测一些事情,但基本布局应该可以工作。
我们将使用带有这些参数的$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"}
}
}
]
推荐阅读
- sql - 我得到 ORA-00928 试图插入新数据
- ember.js - 如何从 Ember 路由模型钩子传递 @tracked 对象
- python - Beautiful Soup:从 p 元素中分离出 span 元素
- maven - 使用 maven pom.xml 生成包含 WAR 文件的 Ear 文件
- php - DATETIME2 到 UNIX 时间戳
- c++ - 为什么 test.h.gcov 将内容显示为 /EOF/
- python - 什么是计算python中两个向量角度余弦的稳健方法?
- php - 根原因拥有的 Laravel Storage Cache 文件夹无法清除缓存
- python - Dataframe.to_json() 不呈现所有参数(熊猫)
- python - 从 protobuf 字节数据读取到 msg