接口用于在指定的数据集 Collection 内写入数据。指定写入的数据是一个map,允许单次插入一条数据或者多条数据,单次最多可插入100条数据。如提供的主键已存在,则更新对应的数据;否则,插入新的数据。
名称 | 类型 | 描述 | 必选 |
|---|---|---|---|
CollectionName | string | 数据集的名称。 | 二选一 |
ResourceID | string | 数据集的Id。 | |
Data | []map[string]any{} | 要更新的数据列表。列表中的每个 Map 代表一条数据,必须包含主键字段。 | 是 |
TTL | int32 | 数据的生存时间(Time-To-Live),单位为秒。超过该时间后数据将被自动删除。 | 否 |
Async | bool | 异步写入开关。默认false。以异步写入的方式可以提高10倍QPS,但增大数据进入索引的延迟,适合大批量离线灌库。 | 否 |
说明
注意:数据插入时主键不能为0
字段类型 | 格式 | 说明 |
|---|---|---|
int64 | 整型数值 | 整数 |
float32 | 浮点数值 | 浮点数 |
string | 字符串 | 字符串。内容限制256byte |
bool | true/false | 布尔类型 |
list | 字符串数组 | 字符串数组 |
list | 整型数组 | 整数数组 |
vector |
| 稠密向量 |
sparse_vector | 输入格式<token_id ,token_weight>的字典列表,来表征稀疏稀疏向量的非零位下标及其对应的值, 其中 token_id 是 string 类型, token_weight 是float 类型 | 稀疏向量 |
text | string | 若为向量化字段,则值不能为空。(若否,可以为空) |
image | interface{} | 若为向量化字段,则值不能为空。(若否,可以为空)
|
video | interface{} | { |
dateTime | string | 分钟级别: |
geoPoint | string | 地理坐标 |
只能填写以下格式的其中一种,全部遵循RFC3339标准(https://datatracker.ietf.org/doc/html/rfc3339)
例如:"2025-08-12T12:34:56+08:00"
格式(string) | 示例 | 说明 | |
|---|---|---|---|
分钟级别 |
|
| 左侧示例都会解析为北京时间 |
秒级别 |
|
| 左侧示例都会解析为北京时间 |
毫秒级别 |
|
| 左侧示例都会解析为北京时间 |
响应体包含公共参数(见下方“响应体公共参数介绍”)。其中 result 字段类型为 UpsertDataResult:
名称 | 类型 | 描述 |
|---|---|---|
TokenUsage | map[string]interface{} | 本次写入涉及的 token 消耗,字段与计量策略相关。 |
参数名 | 类型 | 说明 |
|---|---|---|
RequestID | string | 请求 ID。 |
Code | string | 操作状态码。成功为 |
Message | string | 执行信息。成功则为 |
Result | map[string]interface{} | 操作结果。若无需返回数据,则 |
package main import ( "context" "fmt" "github.com/volcengine/vikingdb-go-sdk/vector" "github.com/volcengine/vikingdb-go-sdk/vector/model" "os" "time" ) func main() { var ( accessKey = os.Getenv("VIKINGDB_AK") secretKey = os.Getenv("VIKINGDB_SK") endpoint = "https://api-vikingdb.vikingdb.cn-beijing.volces.com" region = "cn-beijing" ) client, err := vector.New( vector.AuthIAM(accessKey, secretKey), // IAM auth // vector.AuthAPIKey(apiKey), // APIKey auth vector.WithEndpoint(endpoint), vector.WithRegion(region), vector.WithTimeout(time.Second*30), vector.WithMaxRetries(3), ) if err != nil { fmt.Println("New client failed, err: ", err) panic(err) } ctx := context.Background() resp, err := client.Collection(model.CollectionLocator{ CollectionName: "Your Collection Name", }).Upsert(ctx, model.UpsertDataRequest{ WriteDataBase: model.WriteDataBase{ Data: []model.MapStr{ { "id": 1, "type": "type1", "name": "vikingdb data", "content": "vikingdb is a vector database", }, }, }, }) if err != nil { fmt.Println("Upsert failed, err: ", err) panic(err) } fmt.Println(resp.Message) }