添加计算字段
计算字段允许您通过使用JavaScript表达式结合现有数据库列的值来在文档中创建新字段。计算字段在迁移作业处理每行时都会进行评估。
在开始之前
要创建计算字段,您必须定义映射规则。
有关创建映射规则的详细信息,请参阅以下页面
关于此任务
计算字段表达式使用以下语法访问当前源数据库行的值columns["<COLUMN_NAME>"]
.
步骤
在映射界面,点击架构模型窗格或图视图中的表或集合名称。
添加新的映射规则或编辑现有的映射规则。
单击所有字段标签右侧的+图标。
在字段名称文本框中定义新字段的名称。
在
值表达式
文本框中定义一个新的字段的有效JavaScript表达式。点击完成。
点击保存并关闭。
您的下一个迁移任务运行后,新字段将在MongoDB中可见。
示例
以下示例展示了您可以在计算字段中使用的JavaScript表达式
字符串连接
将两个列合并为一个字段。
以下示例将来自firstName
和lastName
列的字符串值连接起来。
表达式
columns["firstName"] + ' ' + columns["lastName"]
输入
列 | 值 |
---|---|
firstName | John |
lastName | Smith |
输出
"John Smith"
拆分字符串
根据指定的字符将列值拆分为数组。
以下示例使用空格字符作为分隔符拆分fullName
列,并返回数组的第一个元素。
表达式
columns["fullName"].split(' ')[0]
输入
列 | 值 |
---|---|
fullName | John Doe |
输出
"John"
替换字符串
将正则表达式模式应用于替换列中的字符串值。
以下示例在fullName
列中对字符串smith
执行不区分大小写的正则表达式搜索。如果找到匹配项,则表达式将匹配的字符串替换为Doe
。
表达式
columns["fullName"].replace(/smith/i, "Doe")
输入
列 | 值 |
---|---|
fullName | John Smith |
输出
"John Doe"
检查字符串值
根据列是否包含字符串值返回true或false。
以下示例如果fullName
列中的值包含字符串Smith
,则返回true
。如果fullName
列不包含字符串Smith
,则表达式返回false
。
表达式
columns["fullName"].includes("Smith")
输入
列 | 值 |
---|---|
fullName | John Smith |
输出
true
执行数学运算
对列值执行数学运算。
以下示例将列col1
和col2
的值相乘。
表达式
columns["col1"] * columns["col2"]
输入
列 | 值 |
---|---|
coll1 | 3 |
coll2 | 2 |
输出
6
基于逻辑条件分配值
基于逻辑条件分配列值。
以下示例:如果 col1
的值为 3
,则返回 yes
;如果 col1
的值不是 3
,则返回 no
。
表达式
columns["col1"] === 3 ? "yes" : "no"
输入
列 | 值 |
---|---|
coll1 | 3 |
输出
yes
提取 JSON 值
使用计算字段表达式访问存储为 JSON 数据类型的存储的数据。需要 JSON 数据类型列(Postgres)。
以下示例返回 Employee
列中值嵌入的 state
字段的值。
表达式
columns["Employee"].Address.state
输入
{ Employee: { name: "Mark", Address: { state: "California" } } }
输出
"California"
访问数组元素
使用计算字段表达式访问存储为数组数据类型的存储的数据。需要数组数据类型列(Postgres 或 MySQL)。
以下示例返回myArray
列中的第二个元素。
表达式
columns["myArray"][1]
输入
列 | 值 |
---|---|
myArray | [ "a", "b", "c" ] |
输出
"b"
解析日期
将ISO8601格式的日期字符串解析为日期。
以下示例将dateAsString
列中的字符串值转换为日期。
表达式
new Date(columns["dateAsString"])
输入
列 | 值 |
---|---|
dateAsString | "2009-02-11" |
输出
2009-02-11T0:00:00Z