Я использую следующий 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 ....) находит совпадение, я не хочу его обновлять, поэтому я пропускаю его.Как я могу узнать, какие из них я пропустил?.... ПРИМЕР ПРИМЕНЕНИЯ - я создаю список рассылки, в который я отправляю каждому человеку электронное письмо, если был создан узел ... Я пытаюсь сделать это наиболее эффективным способом, учитывая наличие очень большой базы данных,удаленный доступ к БД и время отклика пользователя.