# Finding nodes #

Flows provide a number of ways for locating an existing node\. These methods are summarized in the following table\.

<!-- <table "summary="Methods for locating an existing node" class="defaultstyle" "> -->

Methods for locating an existing node  

Table 1\. Methods for locating an existing node

| Method                                               | Return type | Description                                                                                                                                                                                                                                                                                       |
| ---------------------------------------------------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `s.findAll(type, label)`                             | Collection  | Returns a list of all nodes with the specified type and label\. Either the type or label can be `None`, in which case the other parameter is used\.                                                                                                                                               |
| `s.findAll(filter, recursive)`                       | Collection  | Returns a collection of all nodes that are accepted by the specified filter\. If the recursive flag is `True`, any SuperNodes within the specified flow are also searched\.                                                                                                                       |
| `s.findByID(id)`                                     | Node        | Returns the node with the supplied ID or `None` if no such node exists\. The search is limited to the current stream\.                                                                                                                                                                            |
| `s.findByType(type, label)`                          | Node        | Returns the node with the supplied type, label, or both\. Either the type or name can be `None`, in which case the other parameter is used\. If multiple nodes result in a match, then an arbitrary one is chosen and returned\. If no nodes result in a match, then the return value is `None`\. |
| `s.findDownstream(fromNodes)`                        | Collection  | Searches from the supplied list of nodes and returns the set of nodes downstream of the supplied nodes\. The returned list includes the originally supplied nodes\.                                                                                                                               |
| `s.findUpstream(fromNodes)`                          | Collection  | Searches from the supplied list of nodes and returns the set of nodes upstream of the supplied nodes\. The returned list includes the originally supplied nodes\.                                                                                                                                 |
| `s.findProcessorForID(String id, boolean recursive)` | Node        | Returns the node with the supplied ID or `None` if no such node exists\. If the recursive flag is `true`, then any composite nodes within this diagram are also searched\.                                                                                                                        |

<!-- </table "summary="Methods for locating an existing node" class="defaultstyle" "> -->

As an example, if a flow contains a single Filter node that the script needs to access, the Filter node can be found by using the following script:

    stream = modeler.script.stream()
    node = stream.findByType("filter", None)
    ...

Alternatively, you can use the ID of a node\. For example:

    stream = modeler.script.stream()
    node = stream.findByID("id49CVL4GHVV8")  # the Derive node ID
    node.setPropertyValue("mode", "Multiple")
    node.setPropertyValue("name_extension", "new_derive")

To obtain the ID for any node in a flow, click the  Scripting icon on the toolbar, then select the desired node in your flow and click  Insert selected node ID\.![Node ID](https://dataplatform.cloud.ibm.com/docs/content/wsd/images/spss_node_id.png)
<!-- </article "role="article" "> -->