mongodb 自动生成对象Id mongo db c#

doinxwow  于 2023-08-04  发布在  Go
关注(0)|答案(3)|浏览(104)

我用C#学习mongodb,我想用实体列表创建一个记录,但子实体没有生成他的对象ID。
下面是我的代码:

public class Curso
{
    [BsonId]
    public ObjectId _id { get; set; }

    [BsonElement("descripcion")]
    public string descripcion { get; set; }

    [BsonElement("horas")]
    public int horas { get; set; }

    [BsonElement("alumnos")]
    public IEnumerable<Alumno> alumnos { get; set; }

    public Curso()
    {

    }
}

字符串
校友实体:

public class Alumno
{
    [BsonId]
    public ObjectId _id { get; set; }

    [BsonElement("name")]
    public string name { get; set; }

    [BsonElement("age")]
    public int age { get; set; }
}


我插入一个新的课程,自动生成ID Curso工作,但校友ID没有生成,而是设置为"000000000000000000000000"

public Curso create(Curso curso)
    {
        db.GetCollection<Curso>("curso").Save(curso);
        return curso;
    }


结果:

{ "_id" : ObjectId("5a766ec765583a0f90bc0edf"), "descripcion" : "JAVA + JPA", "horas" : 200, "alumnos" : [ { "_id" : ObjectId("000000000000000000000000"), "name" : "Catalina Castillo", "age" : 22 }, { "_id" : ObjectId("000000000000000000000000"), "name" : "Marcia Pardo", "age" : 45 }, { "_id" : ObjectId("000000000000000000000000"), "name" : "Will Smith", "age" : 24 } ] }

ljo96ir5

ljo96ir51#

每个MongoDB文档都应该有_id字段,该字段具有唯一值。这就是为什么当你传递Curso文档时,零_id,MongoDB会为你生成它。
但是,对于嵌入式文档,情况并非如此。对于MongoDB,嵌入文档中的_id字段只是一个普通的字段,如agename。这就是为什么MongDB不为填充_id的嵌入文档而烦恼,而是在您传递时保存它们,即零填充。
所以你应该自己生成Alumno._id的值。您可以在Alumno构造函数中执行此操作,也可以在将文档插入数据库之前执行此操作:

public class Alumno
{
    [BsonId]
    public ObjectId _id { get; set; }

    [BsonElement("name")]
    public string name { get; set; }

    [BsonElement("age")]
    public int age { get; set; }

    public Alumno()
    {
        _id = ObjectId.GenerateNewId();
    }
}

字符串

blmhpbnm

blmhpbnm2#

您也可以使用以下属性声明您的属性:

[BsonId(IdGenerator = typeof(ObjectIdGenerator))]
public ObjectId? _id { get; set; }

字符串
这将生成一个ID。

nkhmeac6

nkhmeac63#

如果需要在代码中使用Id字段,但不想自己设置它,那么也可以使用BsonRepresentation和string Id。如果您的Id字段不是ObjectId并且不在Id上,则可以使用[BsonId]

[BsonRepresentation(BsonType.ObjectId)]
public string Id { get; set; }

字符串

相关问题