重复文档插入边缘集合

时间:2018-08-18 13:21:57

标签: arangodb arangojs

我正在使用arangodb的节点驱动程序版本6在两个顶点之间插入关系,如下所示。

db.collection("starks").save({ 
    _from: "Starks/Lyanna-Stark", 
    _to: "Starks/Ned-Stark", 
    type: "married" 
});

这会将marriedStarks/Lyanna-Stark之间的关系Starks/Ned-Stark插入数据库。但是,当我运行此查询两次时,它使用不同的关系键将其插入两次。我想避免这种情况,因为对于单个关系,只应显示一个条目。我该如何实现?

2 个答案:

答案 0 :(得分:8)

只需为要创建的所有关系创建唯一索引。例如,如果您的关系集合的名称为relations,则运行此查询以使"_from""_to""type"的组合为唯一

db.relations.ensureIndex({ 
    type: "hash", 
    fields: [ "_from", "_to", "type" ], 
    unique: true 
});

以下是参考链接https://docs.arangodb.com/3.0/Manual/Indexing/Hash.html#ensure-uniqueness-of-relations-in-edge-collections

答案 1 :(得分:0)

您面对此问题的原因很简单,那就是每次保存对象时Arango都会创建一个新ID。边缘记录的唯一性是通过“ _key”键实现的。

为此,您可以自己提供“ _key”键,也可以更改代码的逻辑以检查记录是否已存在于数据库中。