Aggregation lookup stage discards document when null

I am using an aggregation pipeline with a $lookup stage to join a related document to a top level document. The localField that I use to perform the lookup can sometimes be null and I have noticed that in this case, the pipeline discards the entire top-level document.

What I expected was that the pipeline if the localField field had a value, the lookup would succeed and join the related document, and if the localField was null, it would return the document without any join. But in my case, the pipeline only returns documents where the localField has a valid field.

How can I create a pipeline that produces my expected behavior? When the value is valid, perform the join, otherwise just return the original document without any join.

Here is my current pipeline:

[
    {
        "$lookup": {
            "from": "divisions",
            "localField": "division_id", 
            "foreignField": "_id", 
            "as": "division_info",
            "pipeline": [
                {"$project": {
                    "id": {'$toString': "$_id"},
                    "_id": 0,
                    "name": 1,
                    "slug": 1,
                    "weight_lb": 1,
                    "weight_kg": 1
                    }
                }
            ]
        }
    },
    {"$unwind": "$division_info"},
    {
        "$project": { # Deciding which fields to show
            "id": {'$toString': "$_id"},
            "_id": 0,
            "name": 1,
            "gender": 1,
            "age": 1,
            "height": 1,
            "nationality": 1,
            "nickname": 1,
            "reach": 1,
            "reach": 1,
            "stance": 1,
            "stats": 1,
            "debut": 1,
            "division": "$division_info",
        }
    }
]

Thank you!

Your unwind is probably killing the items with no lookup match:

Check out the option for:
preserveNullAndEmptyArrays: