anchor.diff:  but we can leverage on xref::virtual/virtual-nodes-rels.adoc[virtual nodes and relationships],
   via the functions `apoc.trigger.toNode(node, $removedLabels, $removedNodeProperties)` and `apoc.trigger.toRelationship(rel, $removedRelationshipProperties)`.
   
  -So that, we can retrieve information about nodes and relations, 
  +So that, we can retrieve information about nodes and relations,
   using the `apoc.any.properties`, and the `apoc.node.labels` functions.
   
   For example, if we want to create a new node with the same properties (plus the id) and with an additional label retrieved for each deleted node, we can execute:
   
   [source,cypher]
   ----
  -CALL apoc.trigger.add('myTrigger', 
  -"UNWIND $deletedNodes as deletedNode 
  -WITH apoc.trigger.toNode(deletedNode, $removedLabels, $removedNodeProperties) AS deletedNode 
  -CREATE (r:Report {id: id(deletedNode)}) WITH r, deletedNode 
  -CALL apoc.create.addLabels(r, apoc.node.labels(deletedNode)) yield node with node, deletedNode 
  +CALL apoc.trigger.add('myTrigger',
  +"UNWIND $deletedNodes as deletedNode
  +WITH apoc.trigger.toNode(deletedNode, $removedLabels, $removedNodeProperties) AS deletedNode
  +CREATE (r:Report {id: id(deletedNode)}) WITH r, deletedNode
  +CALL apoc.create.addLabels(r, apoc.node.labels(deletedNode)) yield node with node, deletedNode
   set node+=apoc.any.properties(deletedNode)" ,
   {phase:'before'})
   ----
  
positive.code: ====
  To import triggers in another database (for example after a `./neo4j-admin backup` and `/neo4j-admin restore`),
  please see the xref::overview/apoc.systemdb/apoc.systemdb.export.metadata.adoc[apoc.systemdb.export.metadata] procedure.
  ====
negative.code: Same thing regarding `assignedRelationshipProperties` and `removedRelationshipProperties`,
  with the only difference that instead of `node: NODE(n)` key, we'll have `relationship: RELATIONSHIP(n)`.
  
  For example, if we want to create a trigger that at every `SET`, updates 2 properties `time` and `lasts`
  with the current date and the property updated, we can do:
  
  [source,cypher]
  ----
  CALL apoc.trigger.add('setLastUpdate',
    "UNWIND keys($assignedNodeProperties) AS k
    UNWIND $assignedNodeProperties[k] AS map
    WITH map.node AS node, collect(map.key) AS propList
    MATCH (n)
    WHERE id(n) = id(node) AND NOT 'lasts' in propList // to prevent loops
    SET n.time = date(),  n.lasts = propList",
    {phase: 'afterAsync'});
  ----
  
  In the example above, we put `match (n) where id(n) = id(node)` to demonstrate that the we pull the node by id into parameters.
  Anyway, we can get rid off this one and change last row with `SET node.time = date(),  node.lasts = propList`.
  Note that we have to add the condition `AND NOT 'lasts' IN propList` to prevent an infinite loop as this `SET` will trigger this query again.
  
  Then, we can execute:
  [source,cypher]
  