How should a list of followers schema be designed for scalability?

Hello, so I have the following document in a collection for each user.

{
   _id: "userID",
   ... bunch of other data ...,
   follower_list: ["userID1", "userID2", ...],
   following_list: ["userID1", "userID2", ...]
}

Every user can follow or be followed by another user. So within each user’s document, this array of userID’s is stored. I think this is a logical way of representing the data. However, I have a few concerns:

  1. While I feel this is logical, is there a better way to do this? It has to be able to support efficient creation and find operations. This format is very straightforward as whenever a new follow occurs, I just have to push to these arrays, and unfollowing is just removing the element using $pull.
  2. If my array is very large, would removal become less efficient? How does Mongo deal with arrays at a lower level? For example in C++, vectors are contiguous in memory and thus deleting an element at a specific index would mean that previous elements have to be shifted up, and this is an O(n) operation. Is that what happens with $pull?
  3. What happens if my list grows large, such that the user’s document exceeds 16MB because of these 2 arrays? Is this why I would need to implement sharding; horizontal scaling?

Appreciate any help, thank you.