使用Rust SDK执行RELATE查询时,能否展开.bind()传递的参数?
问题说明
常规一对多关系实现
创建一对多关系的常规写法可以正常工作,示例代码如下:
let user = Thing::from(UserId(0)); let tracks: Vec<Thing> = vec![Thing::from(TrackId(0)), Thing::from(TrackId(1))]; db.query("RELATE $user->owns->$track") .bind(("user", user)) .bind(("track", tracks)) .await;
这段代码会在指定用户和每首曲目之间创建关系,生成的记录如下:
user:0->owns->track:0 user:0->owns->track:1
多用户场景下的问题
当绑定多个用户时,比如:
let users: Vec<Thing> = vec![Thing::from(UserId(0)), Thing::from(UserId(1))];
执行后会生成所有用户与所有曲目之间的关系(笛卡尔积),结果如下:
user:0->owns->track:0 user:0->owns->track:1 user:1->owns->track:0 user:1->owns->track:1
期望的结果
我需要的是用户与曲目一一对应创建关系,而非全量匹配,期望生成的记录如下:
user:0->owns->track:0 user:1->owns->track:1
同时,每个关系还需要附带自定义数据(通过SET语句),比如为每个关系设置特定的购买时间:
RELATE user:0->owns->track:0 SET purchase_date = 2022-07-03T07:18:52Z RELATE user:1->owns->track:1 SET purchase_date = 2000-01-01T07:18:52Z
需求
目前我可以通过多次调用query方法实现上述效果,但希望能只用一次query调用完成所有关系的创建及数据设置。
内容的提问来源于stack exchange,提问作者sabjorn
相关产品推荐
相关产品推荐

