重复文档被插入到边缘集合中
Duplicate documents getting inserted in edge collection
我正在使用 arangodb 的节点驱动程序版本 6 来插入两个顶点之间的关系,如下所示。
db.collection("starks").save({
_from: "Starks/Lyanna-Stark",
_to: "Starks/Ned-Stark",
type: "married"
});
这会将 Starks/Lyanna-Stark
和 Starks/Ned-Stark
之间的关系 married
插入到数据库中。但是当我 运行 这个查询两次时,它用不同的关系键插入了两次。我想避免这种情况,因为单个关系应该只存在一个条目。我怎样才能做到这一点?
只需为您正在创建的所有关系创建一个唯一索引。例如,如果您的关系集合的名称是 relations
,则 运行 此查询使 "_from"
、"_to"
、"type"
的组合成为唯一
db.relations.ensureIndex({
type: "hash",
fields: [ "_from", "_to", "type" ],
unique: true
});
您遇到这个问题是因为 Arango 会在您每次保存对象时创建一个新 ID。边缘记录的唯一性是通过“_key”键实现的。
为此,您可以自己提供“_key”键,也可以更改代码逻辑以检查记录是否已存在于数据库中。
我正在使用 arangodb 的节点驱动程序版本 6 来插入两个顶点之间的关系,如下所示。
db.collection("starks").save({
_from: "Starks/Lyanna-Stark",
_to: "Starks/Ned-Stark",
type: "married"
});
这会将 Starks/Lyanna-Stark
和 Starks/Ned-Stark
之间的关系 married
插入到数据库中。但是当我 运行 这个查询两次时,它用不同的关系键插入了两次。我想避免这种情况,因为单个关系应该只存在一个条目。我怎样才能做到这一点?
只需为您正在创建的所有关系创建一个唯一索引。例如,如果您的关系集合的名称是 relations
,则 运行 此查询使 "_from"
、"_to"
、"type"
的组合成为唯一
db.relations.ensureIndex({
type: "hash",
fields: [ "_from", "_to", "type" ],
unique: true
});
您遇到这个问题是因为 Arango 会在您每次保存对象时创建一个新 ID。边缘记录的唯一性是通过“_key”键实现的。
为此,您可以自己提供“_key”键,也可以更改代码逻辑以检查记录是否已存在于数据库中。