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

在SurrealDB的CONTENT语句中能否使用time::now()函数?

问题解答

在使用SurrealDB的CONTENT语句时,直接通过字符串传递time::now()会被当作字面量存储,原因是CONTENT会将传入的变量值原样解析。要让函数执行而非存字符串,有两种可行方案:

方案1:拆分CREATE语句,单独指定函数字段

不要完全依赖CONTENT传递所有字段,把需要执行函数的字段在SQL语句中直接声明:

CREATE stuff SET name = $data.name, created_at = time::now();

对应的Rust代码调整为只传递需要的字面量字段:

fn stuff_here(media: NewMedia) -> BTreeMap<String, Value>  {
  let data: BTreeMap<String, Value> = [
    ("name".to_string(), media.name.into()),
  ].into();
  let vars: BTreeMap<String, Value> = [("data".into(), data.into())].into();
  vars
}

方案2:使用SurrealDB Rust客户端的Function Value变体

SurrealDB的Value枚举提供了Function变体,可以直接构建函数调用,让数据库识别并执行它。修改Rust代码如下:

use surrealdb::sql::Value;

fn stuff_here(media: NewMedia) -> BTreeMap<String, Value>  {
  let data: BTreeMap<String, Value> = [
    ("name".to_string(), media.name.into()),
    ("created_at".to_string(), Value::Function("time::now".to_string(), vec![])),
  ].into();
  let vars: BTreeMap<String, Value> = [("data".into(), data.into())].into();
  vars
}

这样传递给CONTENT的created_at会被识别为函数调用,插入时自动执行time::now()获取当前时间。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 01:05:22