1

我想使用 C# mongo 驱动程序创建 2 个标识字段。第一个 id 字段是默认的 mongo 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; }
}

有可能做这样的事情吗?

4

1 回答 1

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。

于 2013-03-01T15:05:35.060 回答