2013-02-27 1 views
1

Я хотел бы создать 2 идентифицировать поля, используя драйвер C# mongo. Первое поле id - это идентификатор mongo по умолчанию, а второй - уникальный идентификатор целого для каждой записи/документа.Как создать 2 идентифицировать поля в Mongodb-Ccsharp

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. Если вы хотите, чтобы в них было несколько полей с идентификаторами объектов, это совершенно необходимо, просто используйте драйвер C# для создания идентификатора OID (ID объекта) и установите любое поле, которое вы хотели бы использовать для этого OID. Дайте мне знать, если вы хотите, чтобы я расширил это. – ACE

+0

@ACE спасибо за ответ, но я хочу 2 поля, одно из которых поле ObjectId, которое заполнено MongoDB, второе будет поле Integer с автоматическим приращением. – Mirodil

ответ

1

Драйвер C# будет генерировать первый (идентификатор) для вас автоматически, а второй (BookId) - это просто другое поле данных для драйвера, поэтому было бы ответственностью приложения для создания следующего доступного уникального BookID.

Один из способов, которым я видел людей, генерирует следующий доступный пользовательский целочисленный идентификатор, используя коллекцию последовательностей для отслеживания следующего доступного идентификатора. Вот как это будет выглядеть с помощью оболочки 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.