网站大量收购闲置独家精品文档,联系QQ:2885784924

C#编程的实用指南.docx

  1. 1、本文档共17页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

C#编程指南MongoDB中的主键ObjectId

前言

因为很多场景下我们需要在创建MongoDB数据的时候提前生成好主键,像在EF中我们可以通过Guid.NewGuid()来生成主键,本来想着要不要实现一套MongoDB中ObjectId的,结果发现网上各种各样的实现都有,不过好在阅读C#MongoDB驱动mongo-csharp-driver代码的时候发现有ObjectId.GenerateNewId()的方法提供,我们可以直接调用即可,不需要我们在花费多余的时间设计重写了。

MongoDBObjectId类型概述

每次插入一条数据系统都会自动插入一个_id键,键值不可以重复,它可以是任何类型的,也可以手动的插入,默认情况下它的数据类型是ObjectId,由于MongoDB在设计之初就是用作分布式数据库,所以使用ObjectId可以避免不同数据库中_id的重复(如果使用自增的方式在分布式系统中就会出现重复的_id的值)。ObjectId使用12字节的存储空间,每个字节可以存储两个十六进制数字,所以一共可以存储24个十六进制数字组成的字符串,在这24个字符串中,前8位表示时间戳,接下来6位是一个机器码,接下来4位表示进程id,最后6位表示计数器。

MongoDB采用ObjectId来表示主键的类型,数据库中每个文档都拥有一个_id字段表示主键,_id的生成规则如下:

其中包括:4-byteUnix时间戳,3-byte机器ID,2-byte进程ID,3-byte计数器(初始化随机)。

601e2b6b??a3203c??c89f???2d31aa

???↑????????↑???????↑???????↑

?时间戳????机器码???进程ID???随机数

MongoDB.Driver驱动安装

1、直接命令自动安装

Install-Package?MongoDB.Driver

2、搜索Nuget手动安装

调用生成主键ObjectId

inivar?primarykeyId?=?ObjectId.GenerateNewId();

//输出:641c54b2e674000035001dc2

mongo-csharp-driverObjectId源码详解

/*?Copyright?2010-present?MongoDB?Inc.

*

*?Licensed?under?the?Apache?License,?Version?2.0?(the?License);

*?you?may?not?use?this?file?except?in?compliance?with?the?License.

*?You?may?obtain?a?copy?of?the?License?at

*

*?/licenses/LICENSE-2.0

*

*?Unless?required?by?applicable?law?or?agreed?to?in?writing,?software

*?distributed?under?the?License?is?distributed?on?an?AS?IS?BASIS,

*?WITHOUT?WARRANTIES?OR?CONDITIONS?OF?ANY?KIND,?either?express?or?implied.

*?See?the?License?for?the?specific?language?governing?permissions?and

*?limitations?under?the?License.

*/

using?System;

using?System.Diagnostics;

using?System.Runtime.CompilerServices;

using?System.Security;

using?System.Threading;

namespace?MongoDB.Bson

{

????///?summary

????///?Represents?an?ObjectId?(see?also?BsonObjectId).

????///?/summary

#if?NET45

????[Serializable]

#endif

????public?struct?ObjectId?:?IComparableObjectId,?IEquatableObjectId,?IConvertible

????{

????????//?private?static?fields

????????private?static?readonly?ObjectId?__emptyInstance?=?default(ObjectId);

????????

文档评论(0)

jianwei328 + 关注
实名认证
内容提供者

从事多年研发和架构管理经验,丰富的技术理论知识体系,大量技术研发实践经验,对支付清结算体系相对比较熟悉,做过16年研发和管理工作。

1亿VIP精品文档

相关文档