2017-03-23 4 views
1

Ich muss einige Dokumente in einer Sammlung zu einem vereinfachten Dokument zuordnen. kann ich bekommen, was ich mit diesem in dem Mongo Mantel benötigen:Kartenprojektionsergebnis mit mongodb C# -Treiber

db.getCollection('items').aggregate([ 
{ "$project": { 
    "Team": "$TeamId", 
    "Marker": "$Properties.marker.Value" 
}} 
]) 

Ich brauche das gleiche Ergebnis mit C# Treiber (Version 2.3.0) zu erhalten; Ich habe versucht, diesen

var aggregation = m_database.GetCollection<BsonDocument>("items").Aggregate(); 
var projectionDefinition = new BsonDocument("$project", new BsonDocument 
      { 
       { "Team", "$TeamId"}, 
       { "Marker", "$Properties.marker.Value" } 
      }); 

var query = aggregation.Project(projectionDefinition); 
var result = await query.ToListAsync(); 

aber ich bekomme die folgenden Fehler

Befehl Aggregat fehlgeschlagen: $ Ausdrücke sind nicht

Jemand kwons auf der obersten Ebene von $ Projekt erlaubt, was los ist ?

Antwort

2

wenn Sie anrufen Project Sie zu tun haben bereits $project in Ihrem BSON, so Ihre projectionDefinition vereinfachen Sie einfach:

var projectionDefinition = new BsonDocument 
     { 
      { "Team", "$TeamId"}, 
      { "Marker", "$Properties.marker.Value" } 
     }; 

Meine persönliche Meinung: Ich möchte vermeiden, reine BSON verwenden, MongoDB-Treiber gibt Möglichkeiten Sie zu verwenden Ihre C# dto-Klassen dafür.

+0

Vielen Dank! Ich habe einen Code kopiert, der mich in die falsche Richtung zieht. Ich stimme dem Rat zu, reines Bson zu vermeiden (es ist, was ich normalerweise tue, aber in diesem Fall gibt es Gründe dafür, dass reiner bson es für mich machbarer ist) –