2017-02-16 4 views
2

Итак, у меня есть эти две модели, вторая должна содержать ссылку на первую.Добавить ссылку на другой документ в MongoDB | mongocsharpdriver

Модель 1

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

Модель 2

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

Теперь, когда я пытаюсь сохранить первый, а затем обновить ссылку на второй, эталонные показывает в базе данных ObjectId("000000000000000000000000")

Это то, что я делаю:

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

Как это сделать? спасибо

ответ

0

OK. Я нашел путь. Я не уверен, что это лучший способ. Но, возможно, кто-то еще сможет опубликовать лучший ответ в будущем.

Похоже, что нельзя сохранить более одного ObjectId внутри BSON, кроме BsonId (пожалуйста, кто-то меня исправит, если это утверждение неверно). Итак, чтобы создать связь One-to-One или One-to-Many с mongocsharpdriver, я изменил Model2.Model1Id на string вместо ObjectId.

Так рабочий процесс выглядит следующим образом:

Я назвал ObjectId.GenerateNewId() создать новый [BsonID] в одной из моделей.

Я обновил ссылки на второй, позвонив. ModelID.toString()

Теперь, если я хочу найти один из документов, на которые ссылаются в другом документе, мне просто нужно получить строку и создать запрос, вызывающий new ObjectId(string), и это даст мне ссылочный объект, который я ищу для.