我正在使用以下Cypher添加多个节点,但是,如果一个节点创建失败(例如,在约束条件下),我不希望整个列表失败,并且我想知道哪个失败。
router.addInvitees = function(sponsorEmail, inviteeEmails, callback) {
console.log("Add invite params....." + sponsorEmail + " " + JSON.stringify(inviteeEmails));
commons.session
.run(`WITH {paramInviteeEmails} AS coll
UNWIND coll AS invitee
WITH DISTINCT invitee
MERGE (i:withEmail {email: invitee.email})
ON CREATE
SET i:Invitee
WITH i,invitee
MATCH(i:Invitee:withEmail) MATCH (s:Person {email: {paramSponsorEmail}})
CREATE (s)-[r:INVITED {since: timestamp(), token: invitee.token}]->(i)
RETURN COUNT(r) AS invitees`, {
paramSponsorEmail: sponsorEmail,
paramInviteeEmails: inviteeEmails
})
.then(result => {
commons.session.close();
console.log('Result of invitees added to db: ' + result.records[0].get('invitees'));
return callback({
code: '0',
msg: result.records[0].get('invitees')
})
})
.catch(error => callback({
code: '1',
msg: 'No invitees were added to Database' + error
}))
}
是仅成功写入的结果返回吗?还是可以捕获失败的? 为了澄清我的问题...。如果MERGE(i:withEMail ....)找到一个匹配项,我不想更新它,所以我跳过了它。我怎么知道我跳过了哪些? ....用例是我正在创建一个邮件列表,如果创建了一个节点,我会向每个人发送一封电子邮件...考虑到拥有一个非常大的数据库,我正在尝试以最有效的方式进行此操作,远程访问数据库,以及用户体验响应时间。