I have example entry in my database:
{
"_id": {
"$oid": "6241d974a7382732093700d1"
},
"userdata": {
"Name": "SomeName",
"Surname": "SomeSurname",
"Email": "someEmail@gmail.com",
"Adress": {
"Ulica": "Street",
"NumerDomu": "2137",
"NumerMieszkania": "2137",
"KodPocztowy": "22222",
"Miasto": "Warsaw"
}
},
"username": "usrnmatest",
"password": "$2a$11$kLDNbOmg2Ju4jl4o7mcyyuThuE5ZN1xd4VB10TYI/xPtQO.zM828a",
"cards": [
{
"issuer": "Visa",
"cardNumber": "46556456445564",
"expiryMonth": "12",
"expiryYear": "2027",
"CVV": "223",
"name": "Pablo",
"address": "Krynica 21",
"country": "Poland",
"zipcode": "33-380"
},
{
"issuer": "MasterCard",
"cardNumber": "2178811445564",
"expiryMonth": "10",
"expiryYear": "2032",
"CVV": "114",
"name": "Some Data",
"address": "ul.Moskiewskiego 21",
"country": "Poland",
"zipcode": "33-380"
}
]
}
I want to update, for example card
by it's cardNumber
.
I wrote something like this:
var arrayFilter = Builders<User>.Filter.Eq("Id", user.Id)
& Builders<User>.Filter.Eq("cardNumber", card.cardNumber);
var arrayUpdate = Builders<User>.Update.Set("cards.$", card);
var res = _userCollection.UpdateOne(arrayFilter, arrayUpdate);
But I'm getting 0
modified fields.
I kind of followed this tutorial Tutorial Link Any idea how to make it work?
Also here is my model of User
:
public class User
{
[BsonId]
[BsonRepresentation(BsonType.ObjectId)]
public string? Id { get; set; }
[BsonRequired]
[BsonElement("userdata")]
[Required]
public UserData? DaneUzytkownika { get; set; }
[BsonElement("username")]
[BsonRequired]
[Required]
public string UserName { get; set; } = null!;
[BsonElement("password")]
[BsonRequired]
[Required]
public string Password { get; set; } = null!;
[BsonElement("cards")]
public List<Card>? cards { get; set; }
}
And my Card
model if this can help:
public class Card
{
public string? issuer { get; set; }
[BsonElement("cardNumber")]
public string? cardNumber { get; set; }
public string? expiryMonth { get; set; }
public string? expiryYear { get; set; }
public string? CVV { get; set; }
public string? name { get; set; }
public string? address { get; set; }
public string? country { get; set; }
public string? zipcode { get; set; }
}