mongodb - 如何在 MongoDB 聚合管道中将对象/子文档数组转换为字符串数组?
问题描述
我有具有以下结构的文件
{
"_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=...\"}}""
]
}
解决方案
我不确定是否有任何简单的选项可以做到这一点,您可以尝试从 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"
}
}
}
}
- 使用从 MongoDB v4.2 开始的聚合管道更新