如何在Mongodb-Ccsharp中创建2标识字段

时间:2013-02-27 10:05:50

标签: mongodb mongodb-.net-driver

我想使用C#mongo驱动程序创建2个标识字段。第一个id字段是默认的mongo id,第二个id是每个记录/文档的唯一整数id。

public class Book
{
    [BsonId]
    public ObjectId Id { get; set; }

    [BsonId(IdGenerator = typeof(IdGenerator<Book>))]
    public int BookId { get; set; }

    public string Name { get; set; }
}

可以做这样的事吗?

1 个答案:

答案 0 :(得分:1)

C#驱动程序将自动为您生成第一个(Id),但第二个(BookId)只是驱动程序的另一个数据字段,因此应用程序负责生成下一个可用的唯一BookId

我看到人们生成下一个可用的自定义整数Id的一种方法是使用序列集合来跟踪下一个可用的Id。这就是使用MongoDB shell的样子:

db.sequences.insert({ _id : "BookId", nextId : 1 })
db.sequences.find()
{ "_id" : "BookId", "nextId" : 1 }
var result = db.sequences.findAndModify({
    query : { _id : "BookId" },
    update : { $inc : { nextId : 1 }}
    })
result
{ "_id" : "BookId", "nextId" : 1 }
 db.sequences.find()
{ "_id" : "BookId", "nextId" : 2 }

这确实需要额外往返数据库才能找到下一个可用的ID。