You are either selecting them wrongly, or filtering them in a wrong order. The latter would be more efficient, as you do 2 less spatial filtering.
A. Not selecting from the set
For clarity, I made an .all set. But these ->.all can be dropped, and the rest replaced by node._ and (w._) for the default set.
Conceptually, this method A is lazy and messy. In theory, you should separate them.
A3.
However as said in this case, there is no need to intersect the separately obtained set of crossings with that of the bike roads. Filtering on the bike roads is preferable.