How to atomically insert object into a dictionary field when key needs to be escaped

public class Ride {
    public string Id { get; set; }
    public Dictionary<Email, Passenger> Passengers { get; set; } = new();

public async Task<bool> Add(string rideId, Email user) {
        var addedToRide = await _userService.SetActiveRide(user, rideId);
        //var rideUpdate = Builders<Ride>.Update.Set($"Passengers.{user}", new Passenger());
        //var rideUpdate = Builders<Ride>.Update.Set(r => r.Passengers, new KeyValuePair<string, Passenger>(user, new Passenger()));
        // assume ride with id rideId exists
        var rideUpdate = Builders<Ride>.Update.Set(r => r.Passengers[user], new Passenger());
        var ride = await _ridesCollection.FindOneAndUpdateAsync<Ride>(r => r.Id == rideId,
                                                                      new FindOneAndUpdateOptions<Ride> { ReturnDocument = ReturnDocument.After });
        // ride is null when it should've return something
        return ride.Passengers.ContainsKey(user); // errors at the moment

I’ve spent hours and there’s little information on how to do this properly.

Example values for key “

The only way that works is

    public Dictionary<Email, Passenger> Passengers { get; set; } = new();

But I want to avoid doing this as I think k: v is better than {'k': k, 'v': v}