Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Mongodb Ccsharp中创建2个标识字段_Mongodb_Mongodb .net Driver - Fatal编程技术网

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

如何在Mongodb Ccsharp中创建2个标识字段,mongodb,mongodb-.net-driver,Mongodb,Mongodb .net Driver,我想使用C#mongo驱动程序创建两个标识字段。第一个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 N

我想使用C#mongo驱动程序创建两个标识字段。第一个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; }
}
公共课堂教材
{
[BsonId]
公共对象Id{get;set;}
[BsonId(IdGenerator=typeof(IdGenerator))]
public int BookId{get;set;}
公共字符串名称{get;set;}
}
可以这样做吗?

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。

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。

取决于您所指的标识字段。您可以将字段设置为任何您喜欢的内容,包括objectid。如果您想在多个字段中包含对象ID,这是完全合适的,只需使用c#驱动程序生成一个OID(对象ID),并将您想要的任何字段设置为该OID。请告诉我您是否希望我进一步扩展。@ACE谢谢您的回答,但我想要两个字段,其中一个是从MongoDB填充的ObjectId字段,第二个是自动递增的整数字段。这取决于您所指的标识字段。您可以将字段设置为任何您喜欢的内容,包括objectid。如果您想在多个字段中包含对象ID,这是完全合适的,只需使用c#驱动程序生成一个OID(对象ID),并将您想要的任何字段设置为该OID。如果您想让我进一步扩展,请告诉我。@ACE谢谢您的回答,但我想要两个字段,其中一个是从MongoDB填充的ObjectId字段,第二个是自动递增的整数字段。