Orientdb 你如何做';如果不存在,则插入';使用orientjs?
“如果不存在,则插入”的惯用方法是什么 这可以在没有事务的情况下完成吗?尝试以下方法: 如果记录不存在,则使用upsert创建记录,除非它更新Orientdb 你如何做';如果不存在,则插入';使用orientjs?,orientdb,orientjs,Orientdb,Orientjs,“如果不存在,则插入”的惯用方法是什么 这可以在没有事务的情况下完成吗?尝试以下方法: 如果记录不存在,则使用upsert创建记录,除非它更新 var OrientDB = require('orientjs'); var server = OrientDB({ host: 'localhost', port: 2424, username: 'root', password: 'root' }); var db = server.use({
var OrientDB = require('orientjs');
var server = OrientDB({
host: 'localhost',
port: 2424,
username: 'root',
password: 'root'
});
var db = server.use({
name: 'GratefulDeadConcerts',
username: 'root',
password: 'root'
})
db.query('UPDATE V SET id = 23 UPSERT WHERE id = 23')
.then(function (response) {
console.log(response);
});
server.close();
希望能有帮助
关于例如,您可以使用此代码
db.query('select from v where rid = 23')
.then(function (record) {
if(record.length==0){
db.query('insert into v(rid) values (23)');
}
});
希望有帮助。如果数据非常小(可以保存在服务器内存中),则可以执行1个get调用来获取所有数据,并仅对尚未存在的数据执行批插入
如果您的创建数据非常大(超过了运行时内存),则必须遵循Alessandro的方法(这会很慢,因为每次插入都需要检查)。谢谢您的回复。upsert与我所寻找的语义并不完全相同。更新将创建文档的新版本,即使所有数据都相同。我要寻找的是一种通过id检查记录是否存在的方法,如果不存在,则进行插入。如果记录确实存在,它应该是一个
noop
。我现在就是这样做的,但它不是一个真正的原子操作。我正在尝试将OrientDB用于大容量流式处理后端,但仍然存在一些边缘情况,即在流外接收到重复项,并且两个都尝试插入。这会导致索引出现重复键问题。