2016-09-06 6 views
3

MongoDBからSQL Serverにデータを転送しています。 mongoのオブジェクトIDをSQL Serverに格納するには、varbinary(12)の列があります。mongo ObjectIDをSQL Serverに格納する方法は?

質問#1:これはmongoのオブジェクトをSQL Serverに格納する正しい方法ですか?また

私は

select CONVERT(varbinary(12),'54aedb94e6c12b1c0e83385f') 

が、私は戻って取得使用してOBJECTID変換0x353461656462393465366331

質問#2:C#で、どのように私は、文字列進数の値に戻って、この格納されたバイナリに変換できますか?

質問#3:私はEFをデータベースファーストアプローチで使用しています。私は、一致するOBJECTIDのためのSQL Serverテーブルをクエリするにはどうすればよい

public vod DoWork(string mongoid) 
    { 
     //how do i get client based on `mongoid` parameter which is string? 
     var result = _dbContext.Clients.SingleOrDefault(x=>x.MongoId == ?????) 
    } 

MongoIdは、ストレージ・フットプリントを高めるためにつながる、この命題としてvarbinary型のカラム

+0

を考えがあります文字列ie '' 54aedb94e6c12b1c0e83385f''? –

+0

それは私が現在それをどのように保存しているかです。しかし私はこの記事を読むhttp://stackoverflow.com/questions/10978807/has-anyone-found-an-efficient-way-to-store-bson-objectid-values-in-an-sql-databa – LP13

答えて

1

が、結果として、あると仮定(OBJECTIDを考慮することはvarbinaryとして格納されています)マルチフィールドインデックスを作成する可能性があります。

ソリューション: は、余分な情報(PIDタイムスタンプインクリメントPID)を格納するフィールドを追加

var o = new ObjectId(); 
var o1 = o.Timestamp; //int 
var o2 = o.Increment; //int 
var o3 = o.Machine; //int 
var o4 = o.Pid; //short 

特にobjsctIdのために我々が持っている可能性があり:あなたは、同じようにオブジェクトIDを格納

objectID: 57ce88b4857eda2fe48f042f 
Timestamp: 1473153204 
Machine: 8748762 
Pid: 12260 
Increment: 9372719 
関連する問題