MySQL到MongoDB查询翻译

时间:2014-11-21 14:37:56

标签: mysql mongodb database

我需要将以下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

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

 });