MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Lesen Sie bestimmte Feldwerte aus MongodbC#

Je nachdem, ob Ihre unstrukturierten Daten zur Kompilierzeit oder zur Laufzeit bekannt sind, gibt es verschiedene Möglichkeiten, dies zu erreichen.

Beim Kompilierungstyp können Sie Ihre Projektion der Daten modellieren und den Projektionsgenerator verwenden, um anzugeben, wie Ihre Projektion funktionieren soll

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();

Oben haben wir den Rückgabetyp als generisches Argument angegeben, aber wenn wir dies weglassen, wird ein BsonDocument zurückgegeben was je nach Nutzung nützlich sein kann

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

Wir können das gleiche Ergebnis auch erreichen, indem wir den linq-Ausdruck verwenden:

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

Dies führt zur Rückgabe eines anonymen Typs mit einer ID und einem Alter.

Wenn wir die Daten jedoch zur Kompilierzeit nicht kennen und die Felder zur Laufzeit auf Magic Strings basieren, müssen Sie BsonDocument übergeben in die GetCollection Methode:

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

Sie können jetzt beide der oben genannten Methoden anwenden, um das bson-Dokument zu projizieren, aber es wird auf einer Pro-Feld-Basis sein.

Ich würde jedoch empfehlen, die Projektersteller zu verwenden, da dies Ihr Leben ein wenig einfacher machen wird:

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

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