2013-02-27 2 views
1

C# mongo 드라이버를 사용하여 2 개의 필드를 식별하고 싶습니다. 첫 번째 id 필드는 기본 mongo id이고 두 번째 id는 각 레코드/문서에 대한 고유 한 정수 ID입니다.만드는 방법 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를 포함하여 원하는대로 필드를 설정할 수 있습니다. 객체 ID가있는 여러 개의 필드를 포함하려는 경우, 이는 모두 적절합니다. C# 드라이버를 사용하여 OID (객체 ID)를 생성하고 해당 OID에 원하는 필드를 설정하면됩니다. 네가 나를 더 확장 시키길 원한다면 알려줘. – ACE

+0

답장을 주셔서 감사합니다. @ACE는 2 개의 필드를 원해요. 그 중 하나는 MongoDB에서 채워진 ObjectId 필드이고, 두 번째 필드는 자동 증가와 함께 정수 필드입니다. – Mirodil

답변

1

C# 드라이버는 자동으로 첫 번째 ID (Id)를 생성하지만 두 번째 ID (BookId)는 드라이버의 다른 데이터 필드이므로 응용 프로그램에서 다음 고유 한 고유 번호를 생성해야합니다 BookId.

내가 사용할 수있는 다음 사용자 정의 정수를 생성하는 한 가지 방법은 시퀀스를 사용하여 다음 사용 가능한 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를 찾으려면 추가 왕복이 필요합니다.

관련 문제