1

C# mongo ドライバーを使用して 2 つの識別フィールドを作成したいと思います。最初の id フィールドはデフォルトの mongo ID で、2 番目は各レコード/ドキュメントの一意の整数 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 (Id) を自動的に生成しますが、2 番目の ID (BookId) はドライバーにとって別のデータ フィールドにすぎないため、次に使用可能な一意の BookId を生成するのはアプリケーションの役割です。

次に使用可能なカスタム整数 Id を生成する方法の 1 つは、シーケンス コレクションを使用して次に使用可能な 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 }

これには、次に使用可能な ID を見つけるために、データベースへの余分な往復が必要です。

于 2013-03-01T15:05:35.060 に答える