添加计算字段
计算字段允许您使用 JavaScript 表达式组合现有数据库列中的值,从而在文档中创建新字段。 在同步作业期间,每次处理行时都会对计算字段进行求值。
开始之前
要创建计算字段,必须定义映射规则。
要创建映射规则,请参阅以下页面:
关于此任务
计算字段表达式使用语法 columns["<COLUMN_NAME>"]
访问当前源数据库行中的值。
定义计算字段和自定义 ID 字段时,Relational Migrator 显示的初始数据类型为 default 。 当您运行同步作业时,Relational Migrator 会更新此数据类型。
步骤
在Mapping屏幕中,单击Schema model窗格或图表视图上的表或collection名称。
添加新的映射规则或编辑现有映射规则。
单击All fields标签右侧的+图标。
在Field Name文本框中定义新字段的名称。
在
Value expression
文本框中为新字段定义有效的 JavaScript 表达式。单击 Done(连接)。
单击 Save and close(连接)。
下一个同步作业运行后,新字段将在 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。
如果 列中的值包含字符串 ,以下示例将返回true
fullName
Smith
。如果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