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

如何在DataScript中正确查询多值属性,匹配指定值获取预期结果

问题原因

你写的查询返回空有两个核心原因:

  1. DataScript 1.3.0的Datalog查询引擎不支持直接在谓词位置内联匿名函数,所有调用的函数必须是全局命名空间下预先定义好的可访问函数。
  2. 如果你提前给:hobbies属性设置了:db/cardinality :db.cardinality/many多值类型,DataScript存储时会自动把传入的爱好数组拆分为独立datom,不需要手动用some遍历匹配。

正确写法

方案1(推荐,性能最优)

首先确认你的schema中:hobbies配置为多值属性:

{:hobbies {:db/cardinality :db.cardinality/many}}

查询语句可以直接简化为索引匹配,不需要额外谓词:

'[:find ?name
  :where
  [?p :name ?name]
  [?p :hobbies "sports"]]

运行后直接返回预期结果#{["Oliver Smith"]}。

方案2(hobbies为单值存储数组场景)

如果你确实需要把爱好整体作为单值向量存储,先在可访问的命名空间下定义判断函数:

(defn has-sports-hobby? [hobbies]
  (some #{"sports"} hobbies))

再在查询中调用该预定义函数即可:

'[:find ?name
  :where
  [?p :name ?name]
  [?p :hobbies ?hobbies]
  [(你的命名空间/has-sports-hobby? ?hobbies)]]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 23:36:03