Re: COLLECT Multiple, supprime un échantillon

29 views
Skip to first unread message
Message has been deleted
Message has been deleted

Sylvain Roussy

unread,
Oct 6, 2016, 12:00:58 PM10/6/16
to Neo4jFr
Bonjour Bastien,

Bien grosse cette requête, pas facile à lire...

Du coup, j'ai cherché l'opération qui pouvait causer la rupture de données.
Les clauses Optional Match fonctionnent bien comme on l'entend.
Par-contre, une instruction UNWIND sur une liste vide, ne retourne, rien...

J'ai fait l'essai avec ce bout de requête :

MATCH (account:Account)
WHERE
(account.Id = "1")
WITH account
, "2016-08-23T22:00:00Z" as startDate,"2016-07-31T22:00:00Z" as endDate
OPTIONAL MATCH
(v)-[swim:SWIM]-(sw:Swimmer)
WHERE swim
.Start < startDate
OPTIONAL MATCH
(v)-[swam:SWAM]-(sw1:Swimmer)
WHERE swam
.Start < startDate
AND swam
.End > endDate
WITH  account
,collect(sw) + collect(sw1) AS swimmerList, startDate, endDate
UNWIND swimmerList
as sll
RETURN account
,sll


Si vous retirez le UNWIND, vous retrouvez des résultats... Il conditionne le nombre de lignes retournées à l'instruction suivante. Si la liste est vide, il ne retourne aucune ligne.

J'en ai profité pour mettre vos dates en constantes...

En espérant avoir pu vous aider,

Sylvain 
Message has been deleted

Sylvain Roussy

unread,
Oct 6, 2016, 3:27:27 PM10/6/16
to Neo4jFr
Alors,

J'ai une solution, sûrement pas la meilleure, je ne la trouve pas particulièrement élégante toutefois elle fonctionne.
Il s'agit de mettre une fausse valeur via un sélecteur CASE.

Pour reprendre ma requête simplifiée :

MATCH (account:Account)
WHERE
(account.Id = "1")
WITH account
, "2016-08-23T22:00:00Z" as startDate,"2016-07-31T22:00:00Z" as endDate
OPTIONAL MATCH
(v)-[swim:SWIM]-(sw:Swimmer)
WHERE swim
.Start < startDate
OPTIONAL MATCH
(v)-[swam:SWAM]-(sw1:Swimmer)
WHERE swam
.Start < startDate
AND swam
.End >
endDate
WITH  account
,collect(sw) + collect(sw1) AS swimmerListTemp, startDate, endDate
WITH  account
, swimmerListTemp, startDate, endDate,
CASE
 WHEN
(size(swimmerListTemp) > 0) THEN swimmerListTemp
 ELSE
['none']
END as swimmerList
UNWIND swimmerList
as sll
RETURN account
,sll




Reply all
Reply to author
Forward
0 new messages