如何將.NET GUID轉換爲MongoDB ObjectID(在C#中)。另外,我可以將它再次從ObjectID轉換回相同的GUID嗎?將.NET Guid轉換爲MongoDB ObjectID
回答
您不能將ObjectId
轉換爲GUID
,反之亦然,因爲它們是兩個不同的東西(不同的大小,算法)。
您可以使用任何類型的mongoDb _id
,包括GUID
。
例如,在正式C#駕駛員應指定屬性[BsonId]
:
[BsonId]
public Guid Id {get;set;}
[BsonId]
public int Id {get;set;}
甲BSON的ObjectID是由一個4字節的時間戳 的一個12字節的值 (秒以來的秒數),一個3字節的機器ID,一個2字節的進程ID和一個3字節的計數器。請注意, 時間戳和計數器字段必須是 存儲的大端序列號,與其他的 BSON不同。這是因爲他們是 逐字節比較,我們想要 確保大多數增加的順序。
GUID:
一個GUID的值被表示爲 一個32個字符的十六進制字符串,如 {21EC2020-3AEA-1069-A2DD-08002B30309D}, 且通常是存儲爲128位 整數
雖然不是一個直接的答案,請記住,沒有要求_id是一個ObjectID ---只是它是唯一的。
任何有效的類型都可以設置爲_I'd,包括一個嵌入對象或一個。你應該沒問題(禁止任何唯一性違規)使用_id的GUID;實際上,ObjectID實際上只是一個自定義的GUID。
FYI您可以從轉換的ObjectId爲GUID
public static Guid AsGuid(this ObjectId oid)
{
var bytes = oid.ToByteArray().Concat(new byte[] { 5, 5, 5, 5 }).ToArray();
Guid gid = new Guid(bytes);
return gid;
}
/// <summary>
/// Only Use to convert a Guid that was once an ObjectId
/// </summary>
public static ObjectId AsObjectId(this Guid gid)
{
var bytes = gid.ToByteArray().Take(12).ToArray();
var oid = new ObjectId(bytes);
return oid;
}
當我已經轉換爲Guid到ObjectId並再次從ObjectId到Guid時結果不同 – 2017-04-06 13:50:15
當您將Guid轉換爲ObjectId時,實際上會丟失數據。上述轉換是單向可重複轉換。 – MiddleTommy 2017-04-06 21:05:58
它可以從ObjectId轉換爲Guid並返回,但需要一些研究。我最近4年沒有使用ObjectId,因此我不知道對ObjectId類型做了哪些更改,以便更改上述代碼。你應該爲來回的轉換寫一些測試。 – MiddleTommy 2017-04-06 21:12:58
- 1. 將MongoDB Rest的Guid轉換爲C#CLR
- 2. 將Parse objectId轉換爲Mongo ObjectId?
- 3. 將Guid轉換爲Cassandra UUID
- 4. SSIS:將INT轉換爲GUID?
- 5. Flex:將GUID轉換爲Base64
- 6. 將guid轉換爲數值
- 7. 將GUID轉換爲varchar(32)
- 8. 將GUID轉換爲System.Drawing.Imaging.ImageFormat
- 9. 將URI轉換爲GUID
- 10. 將stringbuilder轉換爲guid
- 11. 將Raw(16)轉換爲GUID
- 12. Firebird .NET Provider GUID轉換
- 13. .NET本地GUID轉換
- 14. 將MongoDB BSON ObjectId(oid)轉換爲Objective-C中的生成時間?
- 15. MongoDB將ObjectId轉換爲結果中的字符串
- 16. 將ObjectID(Mongodb)轉換爲JavaScript中的字符串
- 17. 轉換GUID爲長
- 18. 如何將字符串轉換爲ObjectId
- 19. MongoDB將mapReduce轉換爲聚合
- 20. 如何將.net guid轉換爲oracle raw(16)
- 21. ValidationError:強制轉換爲ObjectID
- 22. 使用.NET Guid作爲mongodb文檔ID
- 23. 將mongoDB shell命令轉換爲java
- 24. 如何將MongoDB查詢轉換爲JSON?
- 25. MongoDB將字符串轉換爲數組
- 26. 將MongoDB時間轉換爲時代 - Python
- 27. 將MongoDB BasicDBList轉換爲Java short [] Array
- 28. 如何將字符串轉換爲Guid
- 29. 無法將ProviderUserKey轉換爲GUID?
- 30. 無法將變量轉換爲Guid
在一般情況下,由於GUID有128位,而ObjectId只有96位,所以不能將其轉換回來。轉換過程是有損的,因此不可逆轉。 – 2011-04-01 13:35:17
我可以只將文檔的_id設置爲GUID,並且根本不使用ObjectId? – Journeyman 2011-04-01 13:46:21
Norris :(聲明我有很少的MongoDB經驗)我認爲你可以和Mongo不會抱怨。我認爲選擇ObjectId的唯一理由是節省空間。這個其他問題http://stackoverflow.com/questions/4125275/mongodb-norm-and-poco可能會有所幫助。 – 2011-04-01 13:48:16