2013-02-27 47 views
1

我想用C#mongo驅動程序創建2個標識字段。第一個id字段是默認的mongo id,第二個id字段是每個記錄/文檔的唯一整數ID。如何在Mongodb-Ccsharp中創建2個字段

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

取決於您的身份字段的含義。你可以將你的領域設置爲你喜歡的任何東西,包括ObjectIds。如果你想在它們中有多個帶有對象ID的字段,那就完全合適了,只需使用C#驅動程序來生成一個OID(對象ID)並設置你想要的那個OID。讓我知道你是否希望我在這方面進一步擴大。 – ACE 2013-03-04 19:59:24

+0

@ACE謝謝你的回答,但我想要2個字段,其中一個是從MongoDB填充的ObjectId字段,第二個字段是帶有自動增量的整數字段。 – Mirodil 2013-03-05 08:47:29

回答

1

C#驅動程序會自動爲您生成第一個(Id),但第二個(BookId)只是驅動程序的另一個數據字段,因此應用程序有責任生成下一個可用唯一BOOKID。

有一種方法,我看到人們生成下一個可用的自定義整數Id是通過使用序列集合來跟蹤下一個可用的Id。這是它會如何看待使用MongoDB的外殼:

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 } 

這確實需要額外的往返到數據庫中找到下一個可用的編號。

相關問題