MongoDB C # -Treiber - wie eine Eigenschaft in einem Array von Filialdokumenten abgefragt wird

8

Nehmen wir an, ich habe die folgende Dokumentstruktur in MongoDB.

%Vor%

Ich möchte jedes Dokument finden, das einen Vorfahren enthält, wo _id des Vorfahren 2 ist.

Ich kann diese Abfrage in der Mongo-Shell mit folgendem Befehl ausführen: db.projects.find({"Ancestors._id": 2})

Ich kann diese Abfrage auch mit dem offiziellen C # -Treiber unter Verwendung von Query.EQ("Ancestors._id", new BsonInt32(rootProjectId)) ausführen.

Hier sind meine POCOs; Die tatsächlichen Klassen, die ich verwende, haben mehr Eigenschaften als diese, aber ich wollte die Frage nicht mit unnötigen Details überladen:

%Vor%

Meine Frage lautet: Wie kann ich eine stark typisierte Abfrage mit dem C # -Treiber schreiben, damit ich "Ancestors._id" nicht als Zeichenfolge übergeben muss? Ich möchte in der Lage sein, etwas wie Query<Project>.EQ(p => p.Id, rootProjectId) zu tun, so dass ich stattdessen einen Member-Ausdruck verwenden kann und die Klassenzuordnungen dem Treiber mitteilen, dass er "Ancestors._id" verwenden soll.

    
Brian Oliver 12.09.2013, 14:02
quelle

1 Antwort

13

ElemMatch ist in diesem Fall dein Freund.

versuche folgendes:

%Vor%

Verwenden Sie finalQuery innerhalb eines Find-Befehls in der Projekte-Sammlung.

    
Roi Tal 17.09.2013, 21:24
quelle