Если вы попытаетесь сделать это в одном запросе, вам нужно будет создать одно предложение WHERE
, которое перехватит все свойства NULL
.Исходя из этого вам нужно будет использовать предложение WITH
для передачи этих записей и использовать другое предложение WHERE
, чтобы выбрать только те записи, в которых отсутствует одно свойство.Проблема заключается в возвращении к записям из первого предложения WHERE
.Это может быть возможно, но если это так, я не знаю, как это сделать с Cypher.
Используя несколько запросов для каждого свойства, это легко сделать, добавив IS NULL
к предложению WHERE
.
Чтобы продемонстрировать это, создается набор записей с различными комбинациями установленных и отсутствующих свойств.
CREATE (:Car {make: "toyota", color: "red", model: "prius", car_id: 01} )
CREATE (:Car {make: "toyota", color: "red", car_id: 02} )
CREATE (:Car {make: "toyota", model: "prius", car_id: 03} )
CREATE (:Car {make: "toyota", car_id: 04} );
Чтобы увидеть, что было создано
MATCH (n) RETURN n.make,n.model,n.color,n.car_id,LABELS(n);
╒════════╤═════════╤═════════╤══════════╤═══════════╕
│"n.make"│"n.model"│"n.color"│"n.car_id"│"LABELS(n)"│
╞════════╪═════════╪═════════╪══════════╪═══════════╡
│"toyota"│"prius" │"red" │1 │["Car"] │
├────────┼─────────┼─────────┼──────────┼───────────┤
│"toyota"│null │"red" │2 │["Car"] │
├────────┼─────────┼─────────┼──────────┼───────────┤
│"toyota"│"prius" │null │3 │["Car"] │
├────────┼─────────┼─────────┼──────────┼───────────┤
│"toyota"│null │null │4 │["Car"] │
└────────┴─────────┴─────────┴──────────┴───────────┘
Чтобы обновить только цветсвойство
MATCH (c:Car {make:"toyota"})
WHERE c.color IS NULL
SET c += {color: "blue"}
RETURN c;
и посмотреть, что изменилось
MATCH (n) RETURN n.make,n.model,n.color,n.car_id,LABELS(n);
╒════════╤═════════╤═════════╤══════════╤═══════════╕
│"n.make"│"n.model"│"n.color"│"n.car_id"│"LABELS(n)"│
╞════════╪═════════╪═════════╪══════════╪═══════════╡
│"toyota"│"prius" │"red" │1 │["Car"] │
├────────┼─────────┼─────────┼──────────┼───────────┤
│"toyota"│null │"red" │2 │["Car"] │
├────────┼─────────┼─────────┼──────────┼───────────┤
│"toyota"│"prius" │"blue" │3 │["Car"] │
├────────┼─────────┼─────────┼──────────┼───────────┤
│"toyota"│null │"blue" │4 │["Car"] │
└────────┴─────────┴─────────┴──────────┴───────────┘
Обратите внимание, что обновляются только автомобили без свойства цвета.
То же самое для model
MATCH (m:Car {make:"toyota"})
WHERE m.model IS NULL
SET m += {model: "camry"}
RETURN m;
MATCH (n) RETURN n.make,n.model,n.color,n.car_id,LABELS(n);
╒════════╤═════════╤═════════╤══════════╤═══════════╕
│"n.make"│"n.model"│"n.color"│"n.car_id"│"LABELS(n)"│
╞════════╪═════════╪═════════╪══════════╪═══════════╡
│"toyota"│"prius" │"red" │1 │["Car"] │
├────────┼─────────┼─────────┼──────────┼───────────┤
│"toyota"│"camry" │"red" │2 │["Car"] │
├────────┼─────────┼─────────┼──────────┼───────────┤
│"toyota"│"prius" │"blue" │3 │["Car"] │
├────────┼─────────┼─────────┼──────────┼───────────┤
│"toyota"│"camry" │"blue" │4 │["Car"] │
└────────┴─────────┴─────────┴──────────┴───────────┘