Datamodeling dating app plausibility

I’m trying to build a dating app, and for my backend, I’m using mongoDB. When it comes to the user’s collection, some relations are happening between documents of the same collection. For example, a user A can like, dislike, or may haven’t had the choice yet. A simple schema for this scenario is the following:

database = {
"users": {
    "UserA": {
        "_id": "jhas-d01j-ka23-909a",
        "name": "userA",
        "geo": {
            "lat": "",
            "log": "",
            "perimeter": ""
        },
        "session": {
            "lat": "",
            "log": ""
        },
        "users_accepted": [
            "j2jl-564s-po8a-oej2",
            "soo2-ap23-d003-dkk2"

        ],
        "users_rejected": [
            "jdhs-54sd-sdio-iuiu",
            "mbb0-12md-fl23-sdm2",
        ],
    },
    "UserB": {...},
    "UserC": {...},
    "UserD": {...},
    "UserE": {...},
    "UserF": {...},
    "UserG": {...},

},

}

Here userA has a reference from the users it has seen and made a decision, and stores them either in “users_accepted” or “users_rejected”. If User C hasn’t been seen (either liked or disliked) by userA, then it is clear that it won’t appear in both of the arrays. However, these arrays are unbounded and may exceed the max size that a document can handle. One of the approaches may be to extract both of these arrays and create the following schema:

database = {
"users": {
    "UserA": {
        "_id": "jhas-d01j-ka23-909a",
        "name": "userA",
        "geo": {
            "lat": "",
            "log": "",
            "perimeter": ""
        },
        "session": {
            "lat": "",
            "log": ""
        },
    },
    "UserB": {...},
    "UserC": {...},
    "UserD": {...},
    "UserE": {...},
    "UserF": {...},
    "UserG": {...},


},
"likes": {
    "id_27-82" : {
        "user_give_like" : "userB",
        "user_receive_like" : "userA"
    },
    "id_27-83" : {
        "user_give_like" : "userA",
        "user_receive_like" : "userC"
    },
},
"dislikes": {
    "id_23-82" : {
        "user_give_dislike" : "userA",
        "user_receive_dislike" : "userD"
    },
    "id_23-83" : {
        "user_give_dislike" : "userA",
        "user_receive_dislike" : "userE"
    },
}

}

I need 4 basic queries

  1. Get the users that have liked UserA (Show who is interested in userA)
  2. Get the users that UserA has liked
  3. Get the users that UserA has disliked
  4. Get the matches that UserA has

The query 1. is fairly simple, just query the likes collection and get the users where “user_receive_like” is “userA”.

Query 2. and 3. are used to get the users that userA has not seen yet, get the users that are not in query 2. or query 3.

Finally query 4. may be another collection

"matches": {
    "match_id_1": {
        "user_1": "referece_user1",
        "user_2": "referece_user2"
    },
    "match_id_2": {
        "user_1": "referece_user3",
        "user_2": "referece_user4"
    }
}

Is this approach viable and efficient?