public class Ride {
[BsonRepresentation(BsonType.ObjectId)]
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,
rideUpdate,
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 “hey@gmail.com”
The only way that works is
[BsonDictionaryOptions(DictionaryRepresentation.ArrayOfDocuments)]
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}