使用记录
一个 record 类型是一组键值对(也称为属性)。键(也称为标签)是字符串。值可以是任何数据类型。每个属性可以具有不同的值类型。
记录语法
一个 record 字面量包含一组键值对(属性),用花括号 ({}
) 括起来。属性以逗号分隔。 属性键必须是字符串,并且可以选择用双引号 ("
) 括起来。如果属性键包含空格字符或仅包含数字字符,则必须将属性键用双引号括起来。属性键通过冒号 (:
) 与值关联。 值可以是任何类型。
记录示例
{foo: "bar", baz: 123.4, quz: -2}
{"Company Name": "ACME", "Street Address": "123 Main St.", id: 1123445}
引用记录中的值
Flux 记录是 键索引的。 要引用记录中的值,请使用 点表示法 或 括号表示法 并指定要引用的键。
点表示法
指定要访问的记录,后跟句点 (.
) 和属性键。
c = {name: "John Doe", address: "123 Main St.", id: 1123445}
c.name
// Returns John Doe
c.id
// Returns 1123445
括号表示法
指定要访问的记录,后跟用双引号和方括号 ([""]
) 括起来的属性键。
使用括号表示法访问具有特殊或空白字符的键。
c = {"Company Name": "ACME", "Street Address": "123 Main St.", id: 1123445}
c["Company Name"]
// Returns ACME
c["id"]
// Returns 1123445
引用嵌套记录
要引用嵌套记录,请为每个嵌套级别使用链式点或括号表示法。
customer =
{
name: "John Doe",
address: {
street: "123 Main St.",
city: "Pleasantville",
state: "New York"
}
}
customer.address.street
// Returns 123 Main St.
customer["address"]["city"]
// Returns Pleasantville
customer["address"].state
// Returns New York
静态引用键
记录键只能静态引用,这意味着您无法动态指定要访问的键。 例如
key = "foo"
o = {foo: "bar", baz: 123.4}
o.key
// Error: type error: record is missing label key
要动态引用复合类型中的键,请考虑使用 字典。
操作记录
扩展记录
使用 with
操作符 来扩展记录。 如果指定的键存在,则 with
操作符会覆盖记录属性;如果键不存在,则会添加新属性。
c = {name: "John Doe", id: 1123445}
{c with spouse: "Jane Doe", pet: "Spot"}
// Returns {id: 1123445, name: John Doe, pet: Spot, spouse: Jane Doe}
列出记录中的键
- 导入
experimental
包。 - 使用
experimental.objectKeys
返回记录中键的数组。
import "experimental"
c = {name: "John Doe", id: 1123445}
experimental.objectKeys(o: c)
// Returns [name, id]
比较记录
使用 ==
比较运算符 检查两个记录是否相等。 相等性基于键、它们的值和类型。
{id: 1, msg: "hello"} == {id: 1, msg: "goodbye"}
// Returns false
{foo: 12300.0, bar: 34500.0} == {bar: float(v: "3.45e+04"), foo: float(v: "1.23e+04")}
// Returns true
返回记录的字符串表示形式
使用 display()
返回记录的 Flux 字面量表示形式作为字符串。
x = {a: 1, b: 2, c: 3}
display(v: x)
// Returns "{a: 1, b: 2, c: 3}"
将记录的字符串表示形式包含在表格中
使用 display()
返回记录的 Flux 字面量表示形式作为字符串,并将其包含为列值。
import "sampledata"
sampledata.string()
|> map(fn: (r) => ({_time: r._time, exampleRecord: display(v: {tag: r.tag, value:r._value})}))
输出
_time (time) | exampleRecord (string) |
---|---|
2021-01-01T00:00:00Z | {tag: t1, value: smpl_g9qczs} |
2021-01-01T00:00:10Z | {tag: t1, value: smpl_0mgv9n} |
2021-01-01T00:00:20Z | {tag: t1, value: smpl_phw664} |
2021-01-01T00:00:30Z | {tag: t1, value: smpl_guvzy4} |
2021-01-01T00:00:40Z | {tag: t1, value: smpl_5v3cce} |
2021-01-01T00:00:50Z | {tag: t1, value: smpl_s9fmgy} |
2021-01-01T00:00:00Z | {tag: t2, value: smpl_b5eida} |
2021-01-01T00:00:10Z | {tag: t2, value: smpl_eu4oxp} |
2021-01-01T00:00:20Z | {tag: t2, value: smpl_5g7tz4} |
2021-01-01T00:00:30Z | {tag: t2, value: smpl_sox1ut} |
2021-01-01T00:00:40Z | {tag: t2, value: smpl_wfm757} |
2021-01-01T00:00:50Z | {tag: t2, value: smpl_dtn2bv} |
此页面对您有帮助吗?
感谢您的反馈!
支持与反馈
感谢您成为我们社区的一份子! 我们欢迎并鼓励您提供关于 Flux 和本文档的反馈和错误报告。如需获得支持,请使用以下资源:
拥有年度合同或支持合同的客户 可以 联系 InfluxData 支持。