在MongoDB中添加对另一个文档的引用| mongocsharpdriver

时间:2017-02-16 14:46:16

标签: c# mongodb mongodb-.net-driver

所以,我有这两个模型,第二个模型应该包含对第一个模型的引用。

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

我该怎么做?感谢

1 个答案:

答案 0 :(得分:0)

行。我找到了一个方法。我不确定这是不是最好的方法。但是,也许其他人可以在将来发布更好的答案。

除了ObjectId之外,似乎无法在BSON内保存多个BsonId(如果此声明为假,请有人纠正我)。因此,要与One-to-One创建此One-to-Manymongocsharpdriver关系,我将Model2.Model1Id更改为string而不是ObjectId

所以工作流程如下:

我致电ObjectId.GenerateNewId()在其中一个模型中创建新的[BsonID]

我通过调用更新了对第二个的引用。 ModelID.toString()

现在,如果我想找到另一个文档中引用的文档之一,我只需要获取字符串并创建一个调用new ObjectId(string)的查询,这将为我提供引用的对象我正在寻找。