MongoDB: BsonIgnore

Nel momento in cui ho cominciato ad utilzzare MongoDB mi sono trovato davanti ad un problema. Durante le operazione di salvataggio mi trovato al suo interno anche delle proprieta’ che non servivano. Erano presenti in quanto mi servivano per dei valori di ritorno calcolati dal backend durante la select.

La prima pensata all’epoca e’ stata quella di fare un doppio DTO. Il primo per l’input ed il secondo per l’output estendendo il precedente. Poi e’ arrivata la scoperta di bsonignore e la mia vita e’ cambiata.

BsonIgnore

Sfuttando BsonIgnore sulle singole proprieta’ non desiderate ho ridotto i dati inseriti in MongoDB nel momento del salvataggio.

1
2
3
4
5
6
7
public class CustomerDTO : BaseDTO
{
    public string title { get; set; }
    
    [BsonIgnore]
    public SortedDictionary<string, string> items { get; set; }
}

Nell’esempio appena proposto verra’ salvato tutto il contenuto di BaseDTO (ve lo garantisco in quanto non ho Ignore al suo interno) e la proprieta’ title. La collezione items invece verra’ esclusa.

BsonIgnoreAttribute

Esplorando la classe BsonIgnoreAttribute presente nel namespace MongoDB.Bson.Serialization.Attributes possiamo leggere la definizione ufficiale dell’attributo.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
namespace MongoDB.Bson.Serialization.Attributes
{
    //
    // Summary:
    //     Indicates that this field or property should be ignored when this class is serialized.
    [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field)]
    public class BsonIgnoreAttribute : Attribute
    {
        public BsonIgnoreAttribute();
    }
}

Bello vero? In questo modo non ho dovuto “sdoppiare” i DTO, ma solamente marcare con [BsonIgnore] quelle indesiderate.