写多个记录时如何捕获对neo4j db的失败写入

时间:2018-08-26 19:07:19

标签: neo4j cypher

我正在使用以下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 ....)找到一个匹配项,我不想更新它,所以我跳过了它。我怎么知道我跳过了哪些? ....用例是我正在创建一个邮件列表,如果创建了一个节点,我会向每个人发送一封电子邮件...考虑到拥有一个非常大的数据库,我正在尝试以最有效的方式进行此操作,远程访问数据库,以及用户体验响应时间。

0 个答案:

没有答案