Unfortunately a lot of developers and companies who are publishing code under open source licenses do not get what open source means to their code: You are giving away a lot of control. The less viral the license, the more control you give up. Up to the point where you are basically donating them to the public with no moral or actual right to be compensated for it.
If you want to fully control monetization, keep your code proprietary. But then good luck with having to pay developers for every single line of code and every tiny little bugfix. No standing on the shoulders of giants.
Face it: If you want to build a business on open source, trying to fight others who make use of your code is futile. It is often unfair itself as well: Because there hardly is a successful open source project that has been possible without countless other open source projects that came before it. Projects that created the tools, programming languages, libraries and frameworks that make your own work possible.
If you take that upstream code for granted (which you would have to make or buy if it was not open source), you should also take for granted that others will take your open source code for granted and make money with it without caring for your precious montetization strategy. This is not unfair. It is playing by the rules. The rules just are not built to protect the interests of the original authors of the code, but to protect the freedom of the code itself.