如何在 MongoDB 聚合管道中将对象/子文档数组转换为字符串数组?

时间:2021-01-27 16:00:55

标签: mongodb mongo-shell mongodump

我有以下结构的文档

{
    "_id":{"$oid":"..."},
    "work_type": "ASSIGNMENT",
    
    "materials": [
        {
        "driveFile": {
            "driveFile": {
                "id": "...",
                "title": "filename",
                "alternateLink": "https://drive.google.com/...",
                "thumbnailUrl": "https://drive.google.com/..."
            },
            "shareMode": "STUDENT_COPY"
        }
        },
        {
        "youtubeVideo": {
            "id": "tfdbq",
            "alternateLink": "https://www.youtube.com/watch?v=..."
            }
        }
    ]
}

并且我想将数组中的对象转换为 JSON 字符串,以便我可以将材料字段作为 SQL 中的重复字符串列导入

结果:

{
    "_id":{"$oid":"..."},
    "work_type": "ASSIGNMENT",
    "materials": [
        "{\"driveFile\":{\"driveFile\":{\"id\":\"...\",\"title\":\"filename\",\"alternateLink\":\"https://drive.google.com/...\",\"thumbnailUrl\":\"https://drive.google.com/...\"},\"shareMode\":\"COPY"}}",
        "{\"youtubeVideo\":{\"id\":\"tfdbq\",\"alternateLink\":\"https://www.youtube.com/watch?v=...\"}}""
    ]
}

1 个答案:

答案 0 :(得分:0)

我不确定是否有任何简单的选项可以做到这一点,您可以尝试从 MongoDB v4.4 开始的 $function 运算符,间接它是 JavaScript 代码,

  • 使用 aggregate()
  {
    $set: {
      materials: {
        $function: {
          body: function(materials) { 
            let m = []; 
            for (let i = 0; i < materials.length; i++) 
              m.push(JSON.stringify(materials[i])); 
            return m; 
          },
          args: ["$materials"],
          lang: "js"
        }
      }
    }
  }

Playground

Playground

相关问题