How to configure which shards a sharded collection's data can reside?

I have a sharded collection with 3 shards (shard1, shard2, shard3). Each shard is a 3-node replicaset (rs1, rs2, rs3).

I have a db called activity that has a large sharded collection called items. ie( activity.items). The data in this collection is split across shard{1,2,3}.

I have another db called app and collection called users (ie, app.users). This is not a sharded collection. It is housed on shard1.

I want to separate the replicasets that the apps.users and activity.items reside on. Ideally, app.users remains on shard1 and I can move activity.items from shard1 to a newly created shard4.

Is this possible? Any high level guidance on which commands to be looking at example docs would be greatly appreciated.

I’m open to other solutions as well. For example, maybe there is a way to tag the shards or replicasets in such a way that there is no affinity for data to be migrated there?

You define a zone which shard 2/3/4 belongs to, and then set up zone key range for activity.items.

Then the data on none-zone shards (e.g. shard1) will be gradually moved to other shards by balancer.

We are now using this zone support to isolate our services traffic.

Thank you! And do you just define minkey/maxkey as the range for the zone?

Yes, whole collection data should be in that zone, so full key range.

Thank you, do you have an example of setting a full key range? Ideally for a compound shard key.