You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

webOS项目中如何定义多个Kind并实现区分识别?

在webOS的db8数据库中,你完全可以创建多个独立的Kind来区分movie、music这类不同的数据类型,核心是为每种数据类型生成以appId为前缀的专属Kind ID,而不是局限于:1这类后缀。具体实现步骤如下:

1. 为不同数据类型创建独立的Kind

针对movie和music分别调用putKind,使用不同的Kind ID(比如my.db8.example:movie和my.db8.example:music),并根据数据特性定义对应的schema和索引:

创建Movie的Kind

var appId = "my.db8.example";
var movieKindId = appId + ":movie";

webOS.service.request("luna://com.palm.db", {
    method: "putKind",
    parameters: {
      id: movieKindId,
      owner: appId,          
      schema: {
        path: { type: "string" },
        genre: { type: "string" },
        releaseYear: { type: "integer" } // 电影专属字段
      },
      indexes: [
        { name: "movieGenreIdx", props: [{ name: "genre" }] },
        { name: "movieYearIdx", props: [{ name: "releaseYear" }] }
      ]
    },
    onSuccess: () => printLog("[putKind Movie] 成功"),
    onFailure: () => printLog("[putKind Movie] 失败")
});

创建Music的Kind

var musicKindId = appId + ":music";

webOS.service.request("luna://com.palm.db", {
    method: "putKind",
    parameters: {
      id: musicKindId,
      owner: appId,          
      schema: {
        path: { type: "string" },
        genre: { type: "string" },
        artist: { type: "string" } // 音乐专属字段
      },
      indexes: [
        { name: "musicArtistIdx", props: [{ name: "artist" }] },
        { name: "musicGenreIdx", props: [{ name: "genre" }] }
      ]
    },
    onSuccess: () => printLog("[putKind Music] 成功"),
    onFailure: () => printLog("[putKind Music] 失败")
});

2. 插入数据时指定对应Kind ID

插入电影数据时使用movieKindId,插入音乐数据时使用musicKindId:

插入电影数据

webOS.service.request("luna://com.palm.db", {
    method: "put",
    parameters: {
      objects: [
        {
          _kind: movieKindId,             
          path: "/movies/xxx.mp4",
          genre: "Action",
          releaseYear: 2024
        }
      ]
    },
    onSuccess: (res) => printLog("[put Movie] 成功"),
    onFailure: (res) => printLog(`[put Movie] 失败: ${res.errorText}`)
});

插入音乐数据

webOS.service.request("luna://com.palm.db", {
    method: "put",
    parameters: {
      objects: [
        {
          _kind: musicKindId,             
          path: "/music/yyy.mp3",
          genre: "Rock",
          artist: "BandName"
        }
      ]
    },
    onSuccess: (res) => printLog("[put Music] 成功"),
    onFailure: (res) => printLog(`[put Music] 失败: ${res.errorText}`)
});

3. 查询时通过from指定目标Kind

查询不同类型的数据时,在from字段中传入对应的Kind ID即可:

查询所有电影

webOS.service.request("luna://com.palm.db", {
    method: "find",
    parameters: {
      from: movieKindId,
      query: {
        where: [{ prop: "genre", op: "=", val: "Action" }]
      }
    },
    onSuccess: (res) => printLog(`找到 ${res.results.length} 部动作电影`),
    onFailure: (res) => printLog(`[find Movie] 失败: ${res.errorText}`)
});

查询所有音乐

webOS.service.request("luna://com.palm.db", {
    method: "find",
    parameters: {
      from: musicKindId,
      query: {
        where: [{ prop: "artist", op: "=", val: "BandName" }]
      }
    },
    onSuccess: (res) => printLog(`找到 ${res.results.length} 首该乐队的歌曲`),
    onFailure: (res) => printLog(`[find Music] 失败: ${res.errorText}`)
});

关键说明

db8对Kind ID的要求是必须以你的appId作为前缀,后缀可以自定义(字符串、数字都可以),这样既满足系统的权限校验,又能实现不同数据类型的隔离。你之前误以为只能用:1,其实这只是常见的版本号命名方式,完全可以根据业务需求用更语义化的后缀来区分不同Kind。

内容的提问来源于stack exchange,提问作者akoel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 03:05:36