gpt4 book ai didi

javascript - orientjs:在事务中更新插入边

转载 作者:行者123 更新时间:2023-11-28 05:29:27 25 4
gpt4 key购买 nike

如何使用 orientjs 在事务中更新插入边?我当前的实现更新插入两个顶点并总是创建一条新边:

function add(db, from, edge, to, cb) {
cb = cb || function() {};
log(
'[' + from.clazz + ']' + JSON.stringify(from.attributes) + ' ' +
'-[' + edge.clazz + ']' + JSON.stringify(edge.attributes) + '> ' +
'[' + to.clazz + ']' + JSON.stringify(to.attributes)
);
db.let('source', function(s) {
s.update(from.clazz)
.set(from.attributes)
.upsert()
.where(from.attributes)
.return('after @this');
})
.let('destination', function(d) {
d.update(to.clazz)
.set(to.attributes)
.upsert()
.where(to.attributes)
.return('after @this');
})
.let('edge', function(e) {
e.create('EDGE', edge.clazz)
.from('$source')
.to('$destination')
.set(edge.attributes);
})
.commit()
.return('$edge')
.all()
.then(cb);
}

最佳答案

我在 OrientJS 中没有找到任何用于边的 upsert 方法,但您可以防止在同一源和目标之间两次创建边。你只需要

  • 在创建边缘迁移时创建UNIQUE 索引

以下是创建具有唯一索引的边的迁移代码:

exports.up = (db) => {
return db.class.create('HasApplied', 'E')
.then((hasApplied) => {
return hasApplied.property.create(
[{
name: 'out',
type: 'link',
linkedClass: 'Consultant',
mandatory: true
}, {
name: 'in',
type: 'link',
linkedClass: 'Job',
mandatory: true
}, {
name: 'technicalQuestions',
type: 'embedded'
}, {
name: 'technicalAnswers',
type: 'embedded'
}, {
name: 'behavioralQuestions',
type: 'embedded'
}, {
name: 'behavioralAnswers',
type: 'embedded'
}, {
name: 'artifacts',
type: 'embeddedset'
}, {
name: 'comments',
type: 'string',
}, {
name: 'createdAt',
type: 'datetime'
}, {
name: 'updatedAt',
type: 'datetime'
}]
);
})
.then(() => db.query('CREATE INDEX HasApplied.out_in ON HasApplied (out, in) UNIQUE'));
};

然后,当您的代码尝试运行包含 let block 的事务时:

.let('edge', function(e) {
e.create('EDGE', edge.HasApplied)
.from('$source')
.to('$destination')
.set(edge.attributes);
})

如果发现同一 $source$destination 之间已存在边缘,则会抛出数据库级别错误

我希望这一定会对你有所帮助:)

关于javascript - orientjs:在事务中更新插入边,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39841006/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com