我需要将以下mysql查询转换为mongo。 任何帮助将受到高度赞赏。
SELECT cr.*, COUNT(cj.job_id) AS finished_chunks FROM `checks_reports_df8` cr
LEFT JOIN `checks_jobs_df8` cj ON cr.id = cj.report_id
WHERE cr.started IS NOT NULL AND cr.finished IS NULL AND cj.is_done = 1
答案 0 :(得分:1)
MongoDB不执行JOIN。因此,您必须查询两个集合并在应用程序层上执行JOIN。如何做到这完全取决于您使用哪种编程语言来开发应用程序。你没有说你使用的是哪一个,所以我将在JavaScript中给你一个例子。当您使用其他语言时:第二个片段只是一个简单的FOR循环。
这些是您将使用的MongoDB查询。我无法访问您的数据,因此无法保证其正确性。
var reports = db.checks_reports_df8.find({
"started": {$exists: 1 },
"finished": {$exists: 0 }
});
此查询假定您的空值由缺少字段表示,这是MongoDB中的常规做法。如果您有实际的null
值,请使用"started": { $ne: null }
和"finished": null
。
然后遍历您获得的文档数组。对于每个RESULT
执行此查询:
reports.forEach(function(report) {
var job_count = db.checks_jobs_df8.aggregate([
{$match: {
"report_id": report.id,
"is_done": 1
}},
{$group: {
_id: "$job_id",
"count": { $sum: 1 }
}}
])
// output the data from report and job_count here
});