MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Lire les valeurs de champ spécifiques de MongodbC#

Il existe plusieurs façons d'y parvenir selon que vos données non structurées sont connues au moment de la compilation ou de l'exécution.

Pour le type de compilation, vous pouvez modéliser votre projection des données et utiliser le générateur de projection pour spécifier comment votre projection doit fonctionner

var collection = database.GetCollection<Customer>("customers");

var document = new Customer(){Name = "Joe Bloggs", Age = 30, Address = "York"};
collection.InsertOne(document);

var projection = Builders<Customer>
                    .Projection
                    .Include(x => x.Id).Include(x => x.Age);

var customerProjection = await collection.Find(x => true)
                    .Project<CustomerProjection>(projection)
                    .FirstAsync();

Ci-dessus, nous avons spécifié le type de retour comme argument générique, mais si nous l'omettons, nous recevrons un BsonDocument qui peut être utile selon votre utilisation

var bsonDocument = await collection.Find(x => true)
                    .Project(projection)
                    .FirstAsync();

Nous pouvons également obtenir le même résultat en utilisant l'expression linq :

var projection = await collection.Find(x => true)
    .Project(x => new {x.Id, x.Age}).FirstAsync();

Cela se traduira par le retour d'un type anonyme avec un identifiant et un âge.

Cependant, si nous ne connaissons pas les données au moment de la compilation et que nous basons les champs de chaînes magiques au moment de l'exécution, vous devrez transmettre BsonDocument à GetCollection méthode :

var collection = database.GetCollection<BsonDocument>("customers");

Vous pourrez désormais appliquer les deux méthodes ci-dessus pour projeter le document bson, mais ce sera par champ.

Cependant, je vous conseille d'essayer d'utiliser les générateurs de projet, car cela vous facilitera un peu la vie :

var projectionDefinition = Builders<BsonDocument>.Projection
                                        .Include("age")
                                        .Exclude("_id");

var projection = await collection.Find(x => true)
                    .Project(projectionDefinition)
                    .FirstAsync();