2017-02-16 4 views
2

Also, ich habe diese beiden Modelle, die zweite sollte einen Verweis auf die erste enthalten.Fügen Sie in MongoDB | einen Verweis auf ein anderes Dokument hinzu mongocsharpdriver

Modell 1

public class Model1 { 
    [BsonId] 
    public ObjectId Model1Id { get; set; } 
    ///etc 
} 

Modell 2

public class Model2 { 
    [BsonId] 
    public ObjectId Model2Id { get; set; } 
    public ObjectId Model1Id { get; set; } 
    ///etc 
} 

Nun, wenn ich versuche, den ersten zu speichern und dann die Referenz des zweiten zu aktualisieren, werden die Referenz zeigt in der Datenbank als ObjectId("000000000000000000000000")

Dies ist, was ich tue:

ctx.Model1.InsertOne(model1); //after this a real ObjectId is saved to the DB 

foreach (var m2 in model2) 
{ 
    m2.Model1Id = model1.Model1Id; //this shows as ObjectId("000000000000000000000000") 
} 

ctx.Model2.InsertMany(model2); 

Wie kann ich das tun? danke

Antwort

0

OK. Ich habe einen Weg gefunden. Ich bin mir nicht sicher, ob es der beste Weg ist. Aber vielleicht kann jemand anderes in Zukunft eine bessere Antwort schreiben.

Es scheint, dass es keine Möglichkeit gibt, mehr als eine ObjectId innerhalb einer BSON neben der BsonId zu speichern (bitte korrigieren Sie mich, wenn diese Aussage falsch ist). Also, um diese One-to-One oder One-to-Many Beziehung mit der mongocsharpdriver zu erstellen, änderte ich die Model2.Model1Id zu einem string anstelle einer .

So ist der Arbeitsablauf wie folgt:

I ObjectId.GenerateNewId() genannt neues [BsonID] in eines der Modelle zu erstellen.

Ich habe die Referenzen auf die zweite durch einen Aufruf aktualisiert. ModelID.toString()

Nun, wenn ich eines der Dokumente zu suchen, die in dem anderen Dokument referenziert werden, muss ich nur noch die Zeichenfolge erhalten und eine Abfrage erstellen new ObjectId(string) aufrufen, und das gibt mir das referenzierte Objekt, die ich suche zum.

Verwandte Themen