# set_property

**Set property** is a collection of Memgraph's dynamical access and edit of node and relationship properties. The
procedures included in it involve copying properties from one entity to another.

| Trait               | Value                                                                                                     |
| ------------------- | ------------------- |
| **Module type**     | module              |
| **Implementation**  | C++                 |
| **Graph direction** | directed/undirected |
| **Edge weights**    | unweighted/weighted |
| **Parallelism**     | sequential          |

### Procedures

> **Info**
>
> You can execute this algorithm on [graph projections, subgraphs or portions of the graph](https://memgraph.com/docs/advanced-algorithms/run-algorithms#run-procedures-on-subgraph).

### `copyPropertyNode2Node()`

Copies properties from one node to another.

#### Input:

- `subgraph: Graph` (**OPTIONAL**) ➡ A specific subgraph, which is an [object of type Graph](https://memgraph.com/docs/advanced-algorithms/run-algorithms#run-procedures-on-subgraph) returned by the `project()` function, on which the algorithm is run. 
If subgraph is not specified, the algorithm is computed on the entire graph by default.

- `sourceNode: Vertex` ➡ The node you want to copy property from.
- `sourceProperties: List[string]` ➡ List of properties you want to copy from.
- `targetNode: Vertex` ➡ The node you want to copy property to.
- `targetProperties: List[string]` ➡ List of properties you want to copy to.

#### Output:

- `result: boolean` ➡ yields `true` if the operation was successful, `false` otherwise

#### Usage:

```cypher
MATCH (from {id:1}), MATCH (to {id: 2})
CALL set_property.copyPropertyNode2Node(from, ["prop"], to, ["prop"]) YIELD result
RETURN result;
```

### `copyPropertyNode2Rel()`

Copies properties from one node to another relationship.

#### Input:

- `subgraph: Graph` (**OPTIONAL**) ➡ A specific subgraph, which is an [object of type Graph](https://memgraph.com/docs/advanced-algorithms/run-algorithms#run-procedures-on-subgraph) returned by the `project()` function, on which the algorithm is run. 
If subgraph is not specified, the algorithm is computed on the entire graph by default.

- `sourceNode: Vertex` ➡ The node you want to copy property from.
- `sourceProperties: List[string]` ➡ List of properties you want to copy from.
- `targetRel: Relationship` ➡ The relationship you want to copy property to.
- `targetProperties: List[string]` ➡ List of properties you want to copy to.

#### Output:

- `result: boolean` ➡ yields `true` if the operation was successful, `false` otherwise

#### Usage:

```cypher
MATCH (from {id:1})-[to:TYPE]->({id: 2})
CALL set_property.copyPropertyNode2Rel(from, ["prop"], to, ["prop"]) YIELD result
RETURN result;
```

### `copyPropertyRel2Node()`

Copies properties from one relationship to another node.

#### Input:

- `subgraph: Graph` (**OPTIONAL**) ➡ A specific subgraph, which is an [object of type Graph](https://memgraph.com/docs/advanced-algorithms/run-algorithms#run-procedures-on-subgraph) returned by the `project()` function, on which the algorithm is run. 
If subgraph is not specified, the algorithm is computed on the entire graph by default.

- `sourceRel: Relationship` ➡ The relationship you want to copy property from.
- `sourceProperties: List[string]` ➡ List of properties you want to copy from.
- `targetNode: Vertex` ➡ The node you want to copy property to.
- `targetProperties: List[string]` ➡ List of properties you want to copy to.

#### Output:

- `result: boolean` ➡ yields `true` if the operation was successful, `false` otherwise

#### Usage:

```cypher
MATCH (to {id:1})-[from:TYPE]->({id: 2})
CALL set_property.copyPropertyRel2Node(from, ["prop"], to, ["prop"]) YIELD result
RETURN result;
```

### `copyPropertyRel2Rel()`

Copies properties from one relationship to another.

#### Input:

- `subgraph: Graph` (**OPTIONAL**) ➡ A specific subgraph, which is an [object of type Graph](https://memgraph.com/docs/advanced-algorithms/run-algorithms#run-procedures-on-subgraph) returned by the `project()` function, on which the algorithm is run. 
If subgraph is not specified, the algorithm is computed on the entire graph by default.

- `sourceRel: Vertex` ➡ The relationship you want to copy property from.
- `sourceProperties: List[string]` ➡ List of properties you want to copy from.
- `targetRel: Vertex` ➡ The relationship you want to copy property to.
- `targetProperties: List[string]` ➡ List of properties you want to copy to.

#### Output:

- `result: boolean` ➡ yields `true` if the operation was successful, `false` otherwise

#### Usage:

```cypher
MATCH ({id:1})-[from:TYPE]->(to {id: 2}), ({id:3})-[to:TYPE]->(to {id: 4})
CALL set_property.copyPropertyRel2Rel(from, ["prop"], to, ["prop"]) YIELD result
RETURN result;
```
