自定义名称/文档ID和性能类型

时间:2014-05-21 21:02:01

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

我需要存储一个看起来像这样的类

public class Wsp{

     //mapped
     public ObjectId ObjId {get; set;}  // not called Id
     public Guid Id {get; set;}
     public string Name {get; set;} 

     //NOT mapped
     public string Size  {get; set;} 
     public List<string> Sit  {get; set;}
     ..... 
}

BsonClassMap.RegisterClassMap<Wsp>(map =>
        {
            map.MapProperty(p => p.Name);
            map.MapProperty(p => p.ID);
            //what to do with ObjId ??
        });

我想在mongoDb中只在Wsp Document中存储3个值。

ObjId -> primary key
Id
Name

当我从DB中选择对象时,我希望填充这些值。

另一个问题是,如果在另一个类中我可以使用Guid属性作为主键吗?性能是否会比使用ObjectID更差? mongo db可以生成Guid,还是我必须在插入之前提供唯一的guid?

1 个答案:

答案 0 :(得分:2)

第一个问题,只需添加BsonId,如:

[BsonId]
public ObjectId ObjId {get; set;}  // not called Id

表示此字段是主键,应映射到_id字段。

基本上你可以使用任何东西作为ID,没有限制你必须使用一些指定的类型。因此,只要它们是唯一的,您就可以使用int / GUID / string,任何东西。如果您希望ID不是ObjectId,则必须提供ID。实际上ObjectId是由驱动程序生成的,而不是由MongoDB生成的。

编辑:当您使用BsonClassMap时,请尝试以下

BsonClassMap.RegisterClassMap<Wsp>(map => 
{
    map.AutoMap();
    map.MapProperty(p => p.Name);
    map.MapProperty(p => p.ID);
});

document清楚地解释了这一点:

  

对于每个约定,都有一个默认约定,这是您最常使用的约定,但您可以根据需要覆盖各个约定(甚至可以编写自己的约定。)