我想使用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; }
}
可以做这样的事吗?
答案 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。