古巷幼猫 發表於 2015-10-12 00:46:00

双十一来了,别让你的mongodb宕机了

<p>&nbsp;</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; 好久没过来吹牛了,前段时间一直赶项目,没有时间来更新博客,项目也终于赶完了,接下来就要面临双十一这场惊心动魄的处女秀考验,</p>
<p>我们项目中会有一个wcf集群,而集群地址则放在mongodb中,所以mongodb的核心地位可想而知,如果mongodb挂掉,整个项目也就陷入</p>
<p>瘫痪,想让mongodb不宕机,最简单的方法就是要做双机热备,跟传统的关系型数据库的双机热备模式一样,一个主服务器,一个备份服务器,</p>
<p>一个仲裁服务器。如果热备集群中的主服务器宕掉,会有仲裁服务器参与投票来选出一台作为主服务器,我想这个大家都比较清楚,下面我们来</p>
<p>实战一下,最后会奉献源代码。</p>
<p>&nbsp;</p>
<p><span style="font-size: 18pt">一:搭建mongodb热备集群</span></p>
<p><span style="font-size: 14pt">1. 准备工作</span></p>
<p>  为了做到最简化搭建,我就做一个主,一个备,一个仲裁就好了,然后最简化配置信息都放在mongodb.conf文件中,如下图:</p>
<p><img src="https://images2015.cnblogs.com/blog/214741/201510/214741-20151011231502690-1098522308.png" alt=""></p>
<p>&nbsp;</p>
<p>从上图中可以看到,三个mongodb,我建立了对应的三个文件夹来存放对应的三个db,其中“主服务器”的端口为27000,“备服务器“的端口为</p>
<p>27001,”仲裁服务器“端口为27002。 具体mongodb.conf内容如下:</p>
<p><img src="https://images2015.cnblogs.com/blog/214741/201510/214741-20151011231708128-1786913740.png" alt=""></p>
<p><img src="https://images2015.cnblogs.com/blog/214741/201510/214741-20151012010634835-1647450074.png" alt=""></p>
<p><img src="https://images2015.cnblogs.com/blog/214741/201510/214741-20151012010620882-184417801.png" alt=""></p>
<p>&nbsp;</p>
<p><span style="font-size: 14pt">2. 开启 “主服务器” 【27000】</span></p>
<p>&nbsp;&nbsp;<img src="https://images2015.cnblogs.com/blog/214741/201510/214741-20151011232720737-1316922584.png" alt=""></p>
<p>&nbsp;</p>
<p><span style="font-size: 14pt">3.&nbsp;&nbsp;开启 “备服务器” 【27001】</span></p>
<p><img src="https://images2015.cnblogs.com/blog/214741/201510/214741-20151011232935706-386130058.png" alt=""></p>
<p>&nbsp;</p>
<p><span style="font-size: 14pt">4.&nbsp;&nbsp;开启 “仲裁服务器” 【27002】</span></p>
<p><img src="https://images2015.cnblogs.com/blog/214741/201510/214741-20151011233137268-1142964907.png" alt=""></p>
<p>&nbsp;</p>
<p>现在三台服务器都开启起来了,细心的你会发现,三个控制台都有这么一段英文单词” replSet info you may need to run replSetInitiate“。。。</p>
<p>既然都这么说了,我现在就去run这个func。</p>
<p><img src="https://images2015.cnblogs.com/blog/214741/201510/214741-20151011235326190-1565634135.png" alt=""></p>
<p>&nbsp;</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">db.runCommand({
    </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">replSetInitiate</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">:{
      </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">_id</span><span style="color: rgba(128, 0, 0, 1)">"</span>:<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">datamip</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
      </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">members</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">:[
            {
                </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">_id</span><span style="color: rgba(128, 0, 0, 1)">"</span>:<span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)">,
                </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">host</span><span style="color: rgba(128, 0, 0, 1)">"</span>:<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">127.0.0.1:27000</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
            },
            {
                </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">_id</span><span style="color: rgba(128, 0, 0, 1)">"</span>:<span style="color: rgba(128, 0, 128, 1)">2</span><span style="color: rgba(0, 0, 0, 1)">,
                </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">host</span><span style="color: rgba(128, 0, 0, 1)">"</span>:<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">127.0.0.1:27001</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
            }
      ]
    }
})</span>&nbsp;</pre>
</div>
<p>&nbsp;</p>
<p>配置完了之后,然后我们把“仲裁服务器【27002】”加入到“datamip”这个双机热备分集群中。</p>
<p><img src="https://images2015.cnblogs.com/blog/214741/201510/214741-20151011235700987-784922713.png" alt=""></p>
<p>&nbsp;</p>
<div class="cnblogs_code">
<pre>rs.addArb( { host: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">127.0.0.1:27002</span><span style="color: rgba(128, 0, 0, 1)">"</span>} )</pre>
</div>
<p>&nbsp;</p>
<p>这个命令可以参考下官网的介绍:https://docs.mongodb.com/manual/reference/command/replSetInitiate/ &nbsp;&nbsp;好了,现在大致配置好了,接下</p>
<p>来我们用rs.Status()来查看下当前“主,备,仲裁”的分布情况。</p>
<p><img src="https://images2015.cnblogs.com/blog/214741/201510/214741-20151011235836284-1735063120.png" alt=""></p>
<p>&nbsp;</p>
<p>从图中你应该看到了【27000】成为了主服务器,【27001】成为了备服务器,【27002】成为了仲裁服务器,到目前为止,搭建完成,是不是有</p>
<p>一个很爽的感觉呢???</p>
<p>&nbsp;</p>
<p><span style="font-size: 18pt">三:使用驱动</span></p>
<p>  既然mongodb的双机热备已经做好了,我们驱动也必须支持,这样我们才能够嗨,对伐???其实在配置中使用也很简单,里面有一个</p>
<p>MongoClientSettings,你需要配置一下”ReplicaSetName“和”Servers“列表即可,核心代码如下:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span>         <span style="color: rgba(0, 0, 255, 1)">static</span><span style="color: rgba(0, 0, 0, 1)"> MongoDBHelper()
</span><span style="color: rgba(0, 128, 128, 1)"> 2</span> <span style="color: rgba(0, 0, 0, 1)">      {
</span><span style="color: rgba(0, 128, 128, 1)"> 3</span>             <span style="color: rgba(0, 0, 255, 1)">var</span> ips = connectionString.Split(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">;</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 4</span>
<span style="color: rgba(0, 128, 128, 1)"> 5</span>             <span style="color: rgba(0, 0, 255, 1)">var</span> servicesList = <span style="color: rgba(0, 0, 255, 1)">new</span> List&lt;MongoServerAddress&gt;<span style="color: rgba(0, 0, 0, 1)">();
</span><span style="color: rgba(0, 128, 128, 1)"> 6</span>
<span style="color: rgba(0, 128, 128, 1)"> 7</span>             <span style="color: rgba(0, 0, 255, 1)">foreach</span> (<span style="color: rgba(0, 0, 255, 1)">var</span> ip <span style="color: rgba(0, 0, 255, 1)">in</span><span style="color: rgba(0, 0, 0, 1)"> ips)
</span><span style="color: rgba(0, 128, 128, 1)"> 8</span> <span style="color: rgba(0, 0, 0, 1)">            {
</span><span style="color: rgba(0, 128, 128, 1)"> 9</span>               <span style="color: rgba(0, 0, 255, 1)">var</span> host = ip.Split(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">:</span><span style="color: rgba(128, 0, 0, 1)">'</span>)[<span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(0, 128, 128, 1)">10</span>               <span style="color: rgba(0, 0, 255, 1)">var</span> port = Convert.ToInt32(ip.Split(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">:</span><span style="color: rgba(128, 0, 0, 1)">'</span>)[<span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)">]);
</span><span style="color: rgba(0, 128, 128, 1)">11</span>
<span style="color: rgba(0, 128, 128, 1)">12</span>               servicesList.Add(<span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> MongoServerAddress(host, port));
</span><span style="color: rgba(0, 128, 128, 1)">13</span> <span style="color: rgba(0, 0, 0, 1)">            }
</span><span style="color: rgba(0, 128, 128, 1)">14</span>
<span style="color: rgba(0, 128, 128, 1)">15</span>             setting = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> MongoClientSettings();
</span><span style="color: rgba(0, 128, 128, 1)">16</span>             setting.ReplicaSetName = <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">datamip</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">17</span>
<span style="color: rgba(0, 128, 128, 1)">18</span>             <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">集群中的服务器列表</span>
<span style="color: rgba(0, 128, 128, 1)">19</span>             setting.Servers =<span style="color: rgba(0, 0, 0, 1)"> servicesList;
</span><span style="color: rgba(0, 128, 128, 1)">20</span>         }</pre>
</div>
<p>&nbsp;</p>
<p>其中ips的信息是配置在app.config中。</p>
<div class="cnblogs_code">
<pre> <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">appSettings</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
    <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">add </span><span style="color: rgba(255, 0, 0, 1)">key</span><span style="color: rgba(0, 0, 255, 1)">="mongodbServerList"</span><span style="color: rgba(255, 0, 0, 1)"> value</span><span style="color: rgba(0, 0, 255, 1)">="127.0.0.1:27000;127.0.0.1:27001;127.0.0.1:27002"</span><span style="color: rgba(0, 0, 255, 1)">/&gt;</span>
<span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">appSettings</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span></pre>
</div>
<p>&nbsp;</p>
<p>然后我简单的封装了下mongodb。</p>
<div class="cnblogs_code"><img id="code_img_closed_8331f4c5-9018-48f0-ae06-648c420bdc0a" class="code_img_closed" src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" alt=""><img id="code_img_opened_8331f4c5-9018-48f0-ae06-648c420bdc0a" class="code_img_opened" style="display: none" src="https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" alt="">
<div id="cnblogs_code_open_8331f4c5-9018-48f0-ae06-648c420bdc0a" class="cnblogs_code_hide">
<pre><span style="color: rgba(0, 128, 128, 1)">1</span> <span style="color: rgba(0, 0, 255, 1)">namespace</span><span style="color: rgba(0, 0, 0, 1)"> DataMipCRM.Common
</span><span style="color: rgba(0, 128, 128, 1)">2</span> <span style="color: rgba(0, 0, 0, 1)">{
</span><span style="color: rgba(0, 128, 128, 1)">3</span>   <span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">class</span> MongoDBHelper&lt;T&gt;
<span style="color: rgba(0, 128, 128, 1)">4</span> <span style="color: rgba(0, 0, 0, 1)">    {
</span><span style="color: rgba(0, 128, 128, 1)">5</span>         <span style="color: rgba(0, 0, 255, 1)">private</span> <span style="color: rgba(0, 0, 255, 1)">static</span> <span style="color: rgba(0, 0, 255, 1)">readonly</span> <span style="color: rgba(0, 0, 255, 1)">string</span> connectionString = ConfigurationManager.AppSettings[<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">mongodbServerList</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(0, 128, 128, 1)">6</span>
<span style="color: rgba(0, 128, 128, 1)">7</span>         <span style="color: rgba(0, 0, 255, 1)">static</span> MongoClientSettings setting = <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">8</span>         MongoServer server = <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">9</span>
<span style="color: rgba(0, 128, 128, 1)"> 10</span>         <span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">string</span> tableName = <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">person</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 11</span>
<span style="color: rgba(0, 128, 128, 1)"> 12</span>         <span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">string</span> databaseName = <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">test</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 13</span>
<span style="color: rgba(0, 128, 128, 1)"> 14</span>         <span style="color: rgba(0, 0, 255, 1)">static</span><span style="color: rgba(0, 0, 0, 1)"> MongoDBHelper()
</span><span style="color: rgba(0, 128, 128, 1)"> 15</span> <span style="color: rgba(0, 0, 0, 1)">      {
</span><span style="color: rgba(0, 128, 128, 1)"> 16</span>             <span style="color: rgba(0, 0, 255, 1)">var</span> ips = connectionString.Split(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">;</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 17</span>
<span style="color: rgba(0, 128, 128, 1)"> 18</span>             <span style="color: rgba(0, 0, 255, 1)">var</span> servicesList = <span style="color: rgba(0, 0, 255, 1)">new</span> List&lt;MongoServerAddress&gt;<span style="color: rgba(0, 0, 0, 1)">();
</span><span style="color: rgba(0, 128, 128, 1)"> 19</span>
<span style="color: rgba(0, 128, 128, 1)"> 20</span>             <span style="color: rgba(0, 0, 255, 1)">foreach</span> (<span style="color: rgba(0, 0, 255, 1)">var</span> ip <span style="color: rgba(0, 0, 255, 1)">in</span><span style="color: rgba(0, 0, 0, 1)"> ips)
</span><span style="color: rgba(0, 128, 128, 1)"> 21</span> <span style="color: rgba(0, 0, 0, 1)">            {
</span><span style="color: rgba(0, 128, 128, 1)"> 22</span>               <span style="color: rgba(0, 0, 255, 1)">var</span> host = ip.Split(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">:</span><span style="color: rgba(128, 0, 0, 1)">'</span>)[<span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(0, 128, 128, 1)"> 23</span>               <span style="color: rgba(0, 0, 255, 1)">var</span> port = Convert.ToInt32(ip.Split(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">:</span><span style="color: rgba(128, 0, 0, 1)">'</span>)[<span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)">]);
</span><span style="color: rgba(0, 128, 128, 1)"> 24</span>
<span style="color: rgba(0, 128, 128, 1)"> 25</span>               servicesList.Add(<span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> MongoServerAddress(host, port));
</span><span style="color: rgba(0, 128, 128, 1)"> 26</span> <span style="color: rgba(0, 0, 0, 1)">            }
</span><span style="color: rgba(0, 128, 128, 1)"> 27</span>
<span style="color: rgba(0, 128, 128, 1)"> 28</span>             setting = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> MongoClientSettings();
</span><span style="color: rgba(0, 128, 128, 1)"> 29</span>             setting.ReplicaSetName = <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">datamip</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 30</span>
<span style="color: rgba(0, 128, 128, 1)"> 31</span>             <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">集群中的服务器列表</span>
<span style="color: rgba(0, 128, 128, 1)"> 32</span>             setting.Servers =<span style="color: rgba(0, 0, 0, 1)"> servicesList;
</span><span style="color: rgba(0, 128, 128, 1)"> 33</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)"> 34</span>
<span style="color: rgba(0, 128, 128, 1)"> 35</span>         <span style="color: rgba(0, 0, 255, 1)">public</span> MongoDBHelper(<span style="color: rgba(0, 0, 255, 1)">string</span> databaseName, <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)"> tableName)
</span><span style="color: rgba(0, 128, 128, 1)"> 36</span> <span style="color: rgba(0, 0, 0, 1)">      {
</span><span style="color: rgba(0, 128, 128, 1)"> 37</span>             <span style="color: rgba(0, 0, 255, 1)">this</span>.databaseName =<span style="color: rgba(0, 0, 0, 1)"> databaseName;
</span><span style="color: rgba(0, 128, 128, 1)"> 38</span>             <span style="color: rgba(0, 0, 255, 1)">this</span>.tableName =<span style="color: rgba(0, 0, 0, 1)"> tableName;
</span><span style="color: rgba(0, 128, 128, 1)"> 39</span>
<span style="color: rgba(0, 128, 128, 1)"> 40</span>             server = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> MongoClient(setting).GetServer();
</span><span style="color: rgba(0, 128, 128, 1)"> 41</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)"> 42</span>
<span style="color: rgba(0, 128, 128, 1)"> 43</span>         <span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">bool</span> Remove(Expression&lt;Func&lt;T, <span style="color: rgba(0, 0, 255, 1)">bool</span>&gt;&gt;<span style="color: rgba(0, 0, 0, 1)"> func)
</span><span style="color: rgba(0, 128, 128, 1)"> 44</span> <span style="color: rgba(0, 0, 0, 1)">      {
</span><span style="color: rgba(0, 128, 128, 1)"> 45</span>             <span style="color: rgba(0, 0, 255, 1)">try</span>
<span style="color: rgba(0, 128, 128, 1)"> 46</span> <span style="color: rgba(0, 0, 0, 1)">            {
</span><span style="color: rgba(0, 128, 128, 1)"> 47</span>               <span style="color: rgba(0, 0, 255, 1)">var</span> database =<span style="color: rgba(0, 0, 0, 1)"> server.GetDatabase(databaseName);
</span><span style="color: rgba(0, 128, 128, 1)"> 48</span>
<span style="color: rgba(0, 128, 128, 1)"> 49</span>               <span style="color: rgba(0, 0, 255, 1)">var</span> collection = database.GetCollection&lt;T&gt;<span style="color: rgba(0, 0, 0, 1)">(tableName);
</span><span style="color: rgba(0, 128, 128, 1)"> 50</span>
<span style="color: rgba(0, 128, 128, 1)"> 51</span>               <span style="color: rgba(0, 0, 255, 1)">var</span> query = Query&lt;T&gt;<span style="color: rgba(0, 0, 0, 1)">.Where(func);
</span><span style="color: rgba(0, 128, 128, 1)"> 52</span>
<span style="color: rgba(0, 128, 128, 1)"> 53</span>               <span style="color: rgba(0, 0, 255, 1)">var</span> result =<span style="color: rgba(0, 0, 0, 1)"> collection.Remove(query);
</span><span style="color: rgba(0, 128, 128, 1)"> 54</span>
<span style="color: rgba(0, 128, 128, 1)"> 55</span>               <span style="color: rgba(0, 0, 255, 1)">return</span> result.Response[<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">ok</span><span style="color: rgba(128, 0, 0, 1)">"</span>].AsInt32 &gt; <span style="color: rgba(128, 0, 128, 1)">0</span> ? <span style="color: rgba(0, 0, 255, 1)">true</span> : <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 56</span> <span style="color: rgba(0, 0, 0, 1)">            }
</span><span style="color: rgba(0, 128, 128, 1)"> 57</span>             <span style="color: rgba(0, 0, 255, 1)">catch</span><span style="color: rgba(0, 0, 0, 1)"> (Exception ex)
</span><span style="color: rgba(0, 128, 128, 1)"> 58</span> <span style="color: rgba(0, 0, 0, 1)">            {
</span><span style="color: rgba(0, 128, 128, 1)"> 59</span>               <span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 60</span> <span style="color: rgba(0, 0, 0, 1)">            }
</span><span style="color: rgba(0, 128, 128, 1)"> 61</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)"> 62</span>
<span style="color: rgba(0, 128, 128, 1)"> 63</span>         <span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">bool</span><span style="color: rgba(0, 0, 0, 1)"> RemoveAll()
</span><span style="color: rgba(0, 128, 128, 1)"> 64</span> <span style="color: rgba(0, 0, 0, 1)">      {
</span><span style="color: rgba(0, 128, 128, 1)"> 65</span>             <span style="color: rgba(0, 0, 255, 1)">try</span>
<span style="color: rgba(0, 128, 128, 1)"> 66</span> <span style="color: rgba(0, 0, 0, 1)">            {
</span><span style="color: rgba(0, 128, 128, 1)"> 67</span>               <span style="color: rgba(0, 0, 255, 1)">var</span> database = server.GetDatabase(databaseName);   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">mongodb中的数据库</span>
<span style="color: rgba(0, 128, 128, 1)"> 68</span>
<span style="color: rgba(0, 128, 128, 1)"> 69</span>               <span style="color: rgba(0, 0, 255, 1)">var</span> collection = database.GetCollection&lt;T&gt;<span style="color: rgba(0, 0, 0, 1)">(tableName);
</span><span style="color: rgba(0, 128, 128, 1)"> 70</span>
<span style="color: rgba(0, 128, 128, 1)"> 71</span>               <span style="color: rgba(0, 0, 255, 1)">var</span> result =<span style="color: rgba(0, 0, 0, 1)"> collection.RemoveAll();
</span><span style="color: rgba(0, 128, 128, 1)"> 72</span>
<span style="color: rgba(0, 128, 128, 1)"> 73</span>               <span style="color: rgba(0, 0, 255, 1)">return</span> result.Response[<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">ok</span><span style="color: rgba(128, 0, 0, 1)">"</span>].AsInt32 &gt; <span style="color: rgba(128, 0, 128, 1)">0</span> ? <span style="color: rgba(0, 0, 255, 1)">true</span> : <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 74</span> <span style="color: rgba(0, 0, 0, 1)">            }
</span><span style="color: rgba(0, 128, 128, 1)"> 75</span>             <span style="color: rgba(0, 0, 255, 1)">catch</span><span style="color: rgba(0, 0, 0, 1)"> (Exception ex)
</span><span style="color: rgba(0, 128, 128, 1)"> 76</span> <span style="color: rgba(0, 0, 0, 1)">            {
</span><span style="color: rgba(0, 128, 128, 1)"> 77</span>               <span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 78</span> <span style="color: rgba(0, 0, 0, 1)">            }
</span><span style="color: rgba(0, 128, 128, 1)"> 79</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)"> 80</span>
<span style="color: rgba(0, 128, 128, 1)"> 81</span>         <span style="color: rgba(0, 0, 255, 1)">#region</span> 单条插入
<span style="color: rgba(0, 128, 128, 1)"> 82</span>         <span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)">&lt;summary&gt;</span>
<span style="color: rgba(0, 128, 128, 1)"> 83</span>         <span style="color: rgba(128, 128, 128, 1)">///</span><span style="color: rgba(0, 128, 0, 1)"> 单条插入
</span><span style="color: rgba(0, 128, 128, 1)"> 84</span>         <span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)">&lt;/summary&gt;</span>
<span style="color: rgba(0, 128, 128, 1)"> 85</span>         <span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)">&lt;typeparam name="T"&gt;&lt;/typeparam&gt;</span>
<span style="color: rgba(0, 128, 128, 1)"> 86</span>         <span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)">&lt;param name="t"&gt;&lt;/param&gt;</span>
<span style="color: rgba(0, 128, 128, 1)"> 87</span>         <span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">bool</span><span style="color: rgba(0, 0, 0, 1)"> Insert(T t)
</span><span style="color: rgba(0, 128, 128, 1)"> 88</span> <span style="color: rgba(0, 0, 0, 1)">      {
</span><span style="color: rgba(0, 128, 128, 1)"> 89</span>             <span style="color: rgba(0, 0, 255, 1)">try</span>
<span style="color: rgba(0, 128, 128, 1)"> 90</span> <span style="color: rgba(0, 0, 0, 1)">            {
</span><span style="color: rgba(0, 128, 128, 1)"> 91</span>               <span style="color: rgba(0, 0, 255, 1)">var</span> database = server.GetDatabase(databaseName);   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">mongodb中的数据库</span>
<span style="color: rgba(0, 128, 128, 1)"> 92</span>
<span style="color: rgba(0, 128, 128, 1)"> 93</span>               <span style="color: rgba(0, 0, 255, 1)">var</span> collection = database.GetCollection&lt;T&gt;<span style="color: rgba(0, 0, 0, 1)">(tableName);
</span><span style="color: rgba(0, 128, 128, 1)"> 94</span>
<span style="color: rgba(0, 128, 128, 1)"> 95</span>               <span style="color: rgba(0, 0, 255, 1)">var</span> result =<span style="color: rgba(0, 0, 0, 1)"> collection.Insert(t);
</span><span style="color: rgba(0, 128, 128, 1)"> 96</span>               <span style="color: rgba(0, 0, 255, 1)">return</span> result.DocumentsAffected &gt; <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 97</span> <span style="color: rgba(0, 0, 0, 1)">            }
</span><span style="color: rgba(0, 128, 128, 1)"> 98</span>             <span style="color: rgba(0, 0, 255, 1)">catch</span><span style="color: rgba(0, 0, 0, 1)"> (Exception ex)
</span><span style="color: rgba(0, 128, 128, 1)"> 99</span> <span style="color: rgba(0, 0, 0, 1)">            {
</span><span style="color: rgba(0, 128, 128, 1)">100</span>               <span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">101</span> <span style="color: rgba(0, 0, 0, 1)">            }
</span><span style="color: rgba(0, 128, 128, 1)">102</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)">103</span>         <span style="color: rgba(0, 0, 255, 1)">#endregion</span>
<span style="color: rgba(0, 128, 128, 1)">104</span>
<span style="color: rgba(0, 128, 128, 1)">105</span>         <span style="color: rgba(0, 0, 255, 1)">#region</span> 单条覆盖,如果不存在插入,如果存在覆盖
<span style="color: rgba(0, 128, 128, 1)">106</span>         <span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)">&lt;summary&gt;</span>
<span style="color: rgba(0, 128, 128, 1)">107</span>         <span style="color: rgba(128, 128, 128, 1)">///</span><span style="color: rgba(0, 128, 0, 1)"> 单条覆盖,如果不存在插入,如果存在覆盖
</span><span style="color: rgba(0, 128, 128, 1)">108</span>         <span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)">&lt;/summary&gt;</span>
<span style="color: rgba(0, 128, 128, 1)">109</span>         <span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)">&lt;typeparam name="T"&gt;&lt;/typeparam&gt;</span>
<span style="color: rgba(0, 128, 128, 1)">110</span>         <span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)">&lt;param name="t"&gt;&lt;/param&gt;</span>
<span style="color: rgba(0, 128, 128, 1)">111</span>         <span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">bool</span><span style="color: rgba(0, 0, 0, 1)"> Save(T t)
</span><span style="color: rgba(0, 128, 128, 1)">112</span> <span style="color: rgba(0, 0, 0, 1)">      {
</span><span style="color: rgba(0, 128, 128, 1)">113</span>             <span style="color: rgba(0, 0, 255, 1)">try</span>
<span style="color: rgba(0, 128, 128, 1)">114</span> <span style="color: rgba(0, 0, 0, 1)">            {
</span><span style="color: rgba(0, 128, 128, 1)">115</span>               <span style="color: rgba(0, 0, 255, 1)">var</span> database = server.GetDatabase(databaseName);   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">mongodb中的数据库</span>
<span style="color: rgba(0, 128, 128, 1)">116</span>
<span style="color: rgba(0, 128, 128, 1)">117</span>               <span style="color: rgba(0, 0, 255, 1)">var</span> collection = database.GetCollection&lt;T&gt;<span style="color: rgba(0, 0, 0, 1)">(tableName);
</span><span style="color: rgba(0, 128, 128, 1)">118</span>               <span style="color: rgba(0, 0, 255, 1)">var</span> result =<span style="color: rgba(0, 0, 0, 1)"> collection.Save(t);
</span><span style="color: rgba(0, 128, 128, 1)">119</span>               <span style="color: rgba(0, 0, 255, 1)">return</span> result.DocumentsAffected &gt; <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">120</span> <span style="color: rgba(0, 0, 0, 1)">            }
</span><span style="color: rgba(0, 128, 128, 1)">121</span>             <span style="color: rgba(0, 0, 255, 1)">catch</span><span style="color: rgba(0, 0, 0, 1)"> (Exception ex)
</span><span style="color: rgba(0, 128, 128, 1)">122</span> <span style="color: rgba(0, 0, 0, 1)">            {
</span><span style="color: rgba(0, 128, 128, 1)">123</span>               <span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">124</span> <span style="color: rgba(0, 0, 0, 1)">            }
</span><span style="color: rgba(0, 128, 128, 1)">125</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)">126</span>         <span style="color: rgba(0, 0, 255, 1)">#endregion</span>
<span style="color: rgba(0, 128, 128, 1)">127</span>
<span style="color: rgba(0, 128, 128, 1)">128</span>         <span style="color: rgba(0, 0, 255, 1)">#region</span> 批量插入
<span style="color: rgba(0, 128, 128, 1)">129</span>         <span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)">&lt;summary&gt;</span>
<span style="color: rgba(0, 128, 128, 1)">130</span>         <span style="color: rgba(128, 128, 128, 1)">///</span><span style="color: rgba(0, 128, 0, 1)"> 批量插入
</span><span style="color: rgba(0, 128, 128, 1)">131</span>         <span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)">&lt;/summary&gt;</span>
<span style="color: rgba(0, 128, 128, 1)">132</span>         <span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)">&lt;typeparam name="T"&gt;&lt;/typeparam&gt;</span>
<span style="color: rgba(0, 128, 128, 1)">133</span>         <span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)">&lt;param name="t"&gt;&lt;/param&gt;</span>
<span style="color: rgba(0, 128, 128, 1)">134</span>         <span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">bool</span> Insert(IEnumerable&lt;T&gt;<span style="color: rgba(0, 0, 0, 1)"> t)
</span><span style="color: rgba(0, 128, 128, 1)">135</span> <span style="color: rgba(0, 0, 0, 1)">      {
</span><span style="color: rgba(0, 128, 128, 1)">136</span>             <span style="color: rgba(0, 0, 255, 1)">try</span>
<span style="color: rgba(0, 128, 128, 1)">137</span> <span style="color: rgba(0, 0, 0, 1)">            {
</span><span style="color: rgba(0, 128, 128, 1)">138</span>               <span style="color: rgba(0, 0, 255, 1)">var</span> database = server.GetDatabase(databaseName);   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">mongodb中的数据库</span>
<span style="color: rgba(0, 128, 128, 1)">139</span>
<span style="color: rgba(0, 128, 128, 1)">140</span>               <span style="color: rgba(0, 0, 255, 1)">var</span> collection = database.GetCollection&lt;T&gt;<span style="color: rgba(0, 0, 0, 1)">(tableName);
</span><span style="color: rgba(0, 128, 128, 1)">141</span>
<span style="color: rgba(0, 128, 128, 1)">142</span> <span style="color: rgba(0, 0, 0, 1)">                collection.InsertBatch(t);
</span><span style="color: rgba(0, 128, 128, 1)">143</span>
<span style="color: rgba(0, 128, 128, 1)">144</span>               <span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">145</span> <span style="color: rgba(0, 0, 0, 1)">            }
</span><span style="color: rgba(0, 128, 128, 1)">146</span>             <span style="color: rgba(0, 0, 255, 1)">catch</span><span style="color: rgba(0, 0, 0, 1)"> (Exception ex)
</span><span style="color: rgba(0, 128, 128, 1)">147</span> <span style="color: rgba(0, 0, 0, 1)">            {
</span><span style="color: rgba(0, 128, 128, 1)">148</span>               <span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">149</span> <span style="color: rgba(0, 0, 0, 1)">            }
</span><span style="color: rgba(0, 128, 128, 1)">150</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)">151</span>         <span style="color: rgba(0, 0, 255, 1)">#endregion</span>
<span style="color: rgba(0, 128, 128, 1)">152</span>
<span style="color: rgba(0, 128, 128, 1)">153</span>         <span style="color: rgba(0, 0, 255, 1)">#region</span> 批量查询
<span style="color: rgba(0, 128, 128, 1)">154</span>
<span style="color: rgba(0, 128, 128, 1)">155</span>         <span style="color: rgba(0, 0, 255, 1)">public</span> List&lt;T&gt; Search(Expression&lt;Func&lt;T, <span style="color: rgba(0, 0, 255, 1)">bool</span>&gt;&gt; func, <span style="color: rgba(0, 0, 255, 1)">bool</span> forcemaster = <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)">156</span> <span style="color: rgba(0, 0, 0, 1)">      {
</span><span style="color: rgba(0, 128, 128, 1)">157</span>             <span style="color: rgba(0, 0, 255, 1)">var</span> list = <span style="color: rgba(0, 0, 255, 1)">new</span> List&lt;T&gt;<span style="color: rgba(0, 0, 0, 1)">();
</span><span style="color: rgba(0, 128, 128, 1)">158</span>
<span style="color: rgba(0, 128, 128, 1)">159</span>             <span style="color: rgba(0, 0, 255, 1)">try</span>
<span style="color: rgba(0, 128, 128, 1)">160</span> <span style="color: rgba(0, 0, 0, 1)">            {
</span><span style="color: rgba(0, 128, 128, 1)">161</span>               <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">是否强制使用 “主服务器”</span>
<span style="color: rgba(0, 128, 128, 1)">162</span>               <span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)"> (forcemaster)
</span><span style="color: rgba(0, 128, 128, 1)">163</span> <span style="color: rgba(0, 0, 0, 1)">                {
</span><span style="color: rgba(0, 128, 128, 1)">164</span>                     <span style="color: rgba(0, 0, 255, 1)">var</span> database = server.GetDatabase(databaseName);   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">mongodb中的数据库</span>
<span style="color: rgba(0, 128, 128, 1)">165</span>
<span style="color: rgba(0, 128, 128, 1)">166</span>                     <span style="color: rgba(0, 0, 255, 1)">var</span> collection = database.GetCollection&lt;T&gt;<span style="color: rgba(0, 0, 0, 1)">(tableName);
</span><span style="color: rgba(0, 128, 128, 1)">167</span>                     list = collection.Find(Query&lt;T&gt;<span style="color: rgba(0, 0, 0, 1)">.Where(func)).ToList();
</span><span style="color: rgba(0, 128, 128, 1)">168</span> <span style="color: rgba(0, 0, 0, 1)">                }
</span><span style="color: rgba(0, 128, 128, 1)">169</span>               <span style="color: rgba(0, 0, 255, 1)">else</span>
<span style="color: rgba(0, 128, 128, 1)">170</span> <span style="color: rgba(0, 0, 0, 1)">                {
</span><span style="color: rgba(0, 128, 128, 1)">171</span>                     <span style="color: rgba(0, 0, 255, 1)">var</span> database = server.GetDatabase(databaseName);    <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">mongodb中的数据库</span>
<span style="color: rgba(0, 128, 128, 1)">172</span>
<span style="color: rgba(0, 128, 128, 1)">173</span>                     <span style="color: rgba(0, 0, 255, 1)">var</span> collection = database.GetCollection&lt;T&gt;<span style="color: rgba(0, 0, 0, 1)">(tableName);
</span><span style="color: rgba(0, 128, 128, 1)">174</span>
<span style="color: rgba(0, 128, 128, 1)">175</span>                     list = collection.Find(Query&lt;T&gt;<span style="color: rgba(0, 0, 0, 1)">.Where(func)).ToList();
</span><span style="color: rgba(0, 128, 128, 1)">176</span> <span style="color: rgba(0, 0, 0, 1)">                }
</span><span style="color: rgba(0, 128, 128, 1)">177</span> <span style="color: rgba(0, 0, 0, 1)">            }
</span><span style="color: rgba(0, 128, 128, 1)">178</span>             <span style="color: rgba(0, 0, 255, 1)">catch</span><span style="color: rgba(0, 0, 0, 1)"> (Exception ex)
</span><span style="color: rgba(0, 128, 128, 1)">179</span> <span style="color: rgba(0, 0, 0, 1)">            {
</span><span style="color: rgba(0, 128, 128, 1)">180</span>               <span style="color: rgba(0, 0, 255, 1)">throw</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">181</span> <span style="color: rgba(0, 0, 0, 1)">            }
</span><span style="color: rgba(0, 128, 128, 1)">182</span>
<span style="color: rgba(0, 128, 128, 1)">183</span>             <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> list;
</span><span style="color: rgba(0, 128, 128, 1)">184</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)">185</span>
<span style="color: rgba(0, 128, 128, 1)">186</span>         <span style="color: rgba(0, 0, 255, 1)">#endregion</span>
<span style="color: rgba(0, 128, 128, 1)">187</span>
<span style="color: rgba(0, 128, 128, 1)">188</span>         <span style="color: rgba(0, 0, 255, 1)">#region</span> 单条查询
<span style="color: rgba(0, 128, 128, 1)">189</span>         <span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)">&lt;summary&gt;</span>
<span style="color: rgba(0, 128, 128, 1)">190</span>         <span style="color: rgba(128, 128, 128, 1)">///</span><span style="color: rgba(0, 128, 0, 1)"> 单条查询
</span><span style="color: rgba(0, 128, 128, 1)">191</span>         <span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)">&lt;/summary&gt;</span>
<span style="color: rgba(0, 128, 128, 1)">192</span>         <span style="color: rgba(0, 0, 255, 1)">public</span> T SearchOne(Expression&lt;Func&lt;T, <span style="color: rgba(0, 0, 255, 1)">bool</span>&gt;&gt; func, <span style="color: rgba(0, 0, 255, 1)">bool</span> forcemaster = <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)">193</span> <span style="color: rgba(0, 0, 0, 1)">      {
</span><span style="color: rgba(0, 128, 128, 1)">194</span>             T t = <span style="color: rgba(0, 0, 255, 1)">default</span><span style="color: rgba(0, 0, 0, 1)">(T);
</span><span style="color: rgba(0, 128, 128, 1)">195</span>
<span style="color: rgba(0, 128, 128, 1)">196</span>             <span style="color: rgba(0, 0, 255, 1)">try</span>
<span style="color: rgba(0, 128, 128, 1)">197</span> <span style="color: rgba(0, 0, 0, 1)">            {
</span><span style="color: rgba(0, 128, 128, 1)">198</span>               <span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)"> (forcemaster)
</span><span style="color: rgba(0, 128, 128, 1)">199</span> <span style="color: rgba(0, 0, 0, 1)">                {
</span><span style="color: rgba(0, 128, 128, 1)">200</span>                     <span style="color: rgba(0, 0, 255, 1)">var</span> database = server.GetDatabase(databaseName);   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">mongodb中的数据库</span>
<span style="color: rgba(0, 128, 128, 1)">201</span>
<span style="color: rgba(0, 128, 128, 1)">202</span>                     <span style="color: rgba(0, 0, 255, 1)">var</span> collection = database.GetCollection&lt;T&gt;<span style="color: rgba(0, 0, 0, 1)">(tableName);
</span><span style="color: rgba(0, 128, 128, 1)">203</span>
<span style="color: rgba(0, 128, 128, 1)">204</span>                     t = collection.FindOne(Query&lt;T&gt;<span style="color: rgba(0, 0, 0, 1)">.Where(func));
</span><span style="color: rgba(0, 128, 128, 1)">205</span> <span style="color: rgba(0, 0, 0, 1)">                }
</span><span style="color: rgba(0, 128, 128, 1)">206</span>               <span style="color: rgba(0, 0, 255, 1)">else</span>
<span style="color: rgba(0, 128, 128, 1)">207</span> <span style="color: rgba(0, 0, 0, 1)">                {
</span><span style="color: rgba(0, 128, 128, 1)">208</span>                     <span style="color: rgba(0, 0, 255, 1)">var</span> database = server.GetDatabase(databaseName);   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">mongodb中的数据库</span>
<span style="color: rgba(0, 128, 128, 1)">209</span>
<span style="color: rgba(0, 128, 128, 1)">210</span>                     <span style="color: rgba(0, 0, 255, 1)">var</span> collection = database.GetCollection&lt;T&gt;<span style="color: rgba(0, 0, 0, 1)">(tableName);
</span><span style="color: rgba(0, 128, 128, 1)">211</span>
<span style="color: rgba(0, 128, 128, 1)">212</span>                     t = collection.FindOne(Query&lt;T&gt;<span style="color: rgba(0, 0, 0, 1)">.Where(func));
</span><span style="color: rgba(0, 128, 128, 1)">213</span> <span style="color: rgba(0, 0, 0, 1)">                }
</span><span style="color: rgba(0, 128, 128, 1)">214</span>
<span style="color: rgba(0, 128, 128, 1)">215</span>               <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> t;
</span><span style="color: rgba(0, 128, 128, 1)">216</span> <span style="color: rgba(0, 0, 0, 1)">            }
</span><span style="color: rgba(0, 128, 128, 1)">217</span>             <span style="color: rgba(0, 0, 255, 1)">catch</span><span style="color: rgba(0, 0, 0, 1)"> (Exception ex)
</span><span style="color: rgba(0, 128, 128, 1)">218</span> <span style="color: rgba(0, 0, 0, 1)">            {
</span><span style="color: rgba(0, 128, 128, 1)">219</span>               <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> t;
</span><span style="color: rgba(0, 128, 128, 1)">220</span> <span style="color: rgba(0, 0, 0, 1)">            }
</span><span style="color: rgba(0, 128, 128, 1)">221</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)">222</span>         <span style="color: rgba(0, 0, 255, 1)">#endregion</span>
<span style="color: rgba(0, 128, 128, 1)">223</span>
<span style="color: rgba(0, 128, 128, 1)">224</span>         <span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)">&lt;summary&gt;</span>
<span style="color: rgba(0, 128, 128, 1)">225</span>         <span style="color: rgba(128, 128, 128, 1)">///</span><span style="color: rgba(0, 128, 0, 1)"> 查询所有数据
</span><span style="color: rgba(0, 128, 128, 1)">226</span>         <span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)">&lt;/summary&gt;</span>
<span style="color: rgba(0, 128, 128, 1)">227</span>         <span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)">&lt;returns&gt;&lt;/returns&gt;</span>
<span style="color: rgba(0, 128, 128, 1)">228</span>         <span style="color: rgba(0, 0, 255, 1)">public</span> List&lt;T&gt;<span style="color: rgba(0, 0, 0, 1)"> SearchAll()
</span><span style="color: rgba(0, 128, 128, 1)">229</span> <span style="color: rgba(0, 0, 0, 1)">      {
</span><span style="color: rgba(0, 128, 128, 1)">230</span>             <span style="color: rgba(0, 0, 255, 1)">var</span> list = <span style="color: rgba(0, 0, 255, 1)">new</span> List&lt;T&gt;<span style="color: rgba(0, 0, 0, 1)">();
</span><span style="color: rgba(0, 128, 128, 1)">231</span>
<span style="color: rgba(0, 128, 128, 1)">232</span>             <span style="color: rgba(0, 0, 255, 1)">try</span>
<span style="color: rgba(0, 128, 128, 1)">233</span> <span style="color: rgba(0, 0, 0, 1)">            {
</span><span style="color: rgba(0, 128, 128, 1)">234</span>               <span style="color: rgba(0, 0, 255, 1)">var</span> database = server.GetDatabase(databaseName);    <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">mongodb中的数据库</span>
<span style="color: rgba(0, 128, 128, 1)">235</span>
<span style="color: rgba(0, 128, 128, 1)">236</span>               <span style="color: rgba(0, 0, 255, 1)">var</span> collection = database.GetCollection&lt;T&gt;<span style="color: rgba(0, 0, 0, 1)">(tableName);
</span><span style="color: rgba(0, 128, 128, 1)">237</span>
<span style="color: rgba(0, 128, 128, 1)">238</span>               list =<span style="color: rgba(0, 0, 0, 1)"> collection.FindAll().ToList();
</span><span style="color: rgba(0, 128, 128, 1)">239</span>
<span style="color: rgba(0, 128, 128, 1)">240</span>               <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> list;
</span><span style="color: rgba(0, 128, 128, 1)">241</span> <span style="color: rgba(0, 0, 0, 1)">            }
</span><span style="color: rgba(0, 128, 128, 1)">242</span>             <span style="color: rgba(0, 0, 255, 1)">catch</span><span style="color: rgba(0, 0, 0, 1)"> (Exception ex)
</span><span style="color: rgba(0, 128, 128, 1)">243</span> <span style="color: rgba(0, 0, 0, 1)">            {
</span><span style="color: rgba(0, 128, 128, 1)">244</span>               <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> list;
</span><span style="color: rgba(0, 128, 128, 1)">245</span> <span style="color: rgba(0, 0, 0, 1)">            }
</span><span style="color: rgba(0, 128, 128, 1)">246</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)">247</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span><span style="color: rgba(0, 128, 128, 1)">248</span> }</pre>
</div>
<span class="cnblogs_code_collapse">View Code</span></div>
<p>&nbsp;</p>
<p><span style="font-size: 18pt">四:测试一下</span></p>
<p>1. 首先向mongodb中插入一条记录,dbname=mydb, tablename=test,插入后我们用mongodUVE看一下数据:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span> <span style="color: rgba(0, 0, 255, 1)">namespace</span><span style="color: rgba(0, 0, 0, 1)"> ConsoleApplication2
</span><span style="color: rgba(0, 128, 128, 1)"> 2</span> <span style="color: rgba(0, 0, 0, 1)">{
</span><span style="color: rgba(0, 128, 128, 1)"> 3</span>   <span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)"> Program
</span><span style="color: rgba(0, 128, 128, 1)"> 4</span> <span style="color: rgba(0, 0, 0, 1)">    {
</span><span style="color: rgba(0, 128, 128, 1)"> 5</span>         <span style="color: rgba(0, 0, 255, 1)">static</span> <span style="color: rgba(0, 0, 255, 1)">void</span> Main(<span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">[] args)
</span><span style="color: rgba(0, 128, 128, 1)"> 6</span> <span style="color: rgba(0, 0, 0, 1)">      {
</span><span style="color: rgba(0, 128, 128, 1)"> 7</span>             MongoDBHelper&lt;MongodbCustomerModel&gt; helper = <span style="color: rgba(0, 0, 255, 1)">new</span> MongoDBHelper&lt;MongodbCustomerModel&gt;(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">mydb</span><span style="color: rgba(128, 0, 0, 1)">"</span>, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">test</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 8</span>
<span style="color: rgba(0, 128, 128, 1)"> 9</span>             helper.Save(<span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> MongodbCustomerModel()
</span><span style="color: rgba(0, 128, 128, 1)">10</span> <span style="color: rgba(0, 0, 0, 1)">            {
</span><span style="color: rgba(0, 128, 128, 1)">11</span>               SendLastTime =<span style="color: rgba(0, 0, 0, 1)"> DateTime.Now,
</span><span style="color: rgba(0, 128, 128, 1)">12</span>               ShopID = <span style="color: rgba(128, 0, 128, 1)">1</span>
<span style="color: rgba(0, 128, 128, 1)">13</span> <span style="color: rgba(0, 0, 0, 1)">            });
</span><span style="color: rgba(0, 128, 128, 1)">14</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)">15</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span><span style="color: rgba(0, 128, 128, 1)">16</span>
<span style="color: rgba(0, 128, 128, 1)">17</span>   <span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)"> MongodbCustomerModel
</span><span style="color: rgba(0, 128, 128, 1)">18</span> <span style="color: rgba(0, 0, 0, 1)">    {
</span><span style="color: rgba(0, 128, 128, 1)">19</span>         <span style="color: rgba(0, 0, 255, 1)">public</span> ObjectId _id { <span style="color: rgba(0, 0, 255, 1)">get</span>; <span style="color: rgba(0, 0, 255, 1)">set</span><span style="color: rgba(0, 0, 0, 1)">; }
</span><span style="color: rgba(0, 128, 128, 1)">20</span>
<span style="color: rgba(0, 128, 128, 1)">21</span>         <span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">int</span> ShopID { <span style="color: rgba(0, 0, 255, 1)">get</span>; <span style="color: rgba(0, 0, 255, 1)">set</span><span style="color: rgba(0, 0, 0, 1)">; }
</span><span style="color: rgba(0, 128, 128, 1)">22</span>
<span style="color: rgba(0, 128, 128, 1)">23</span>         <span style="color: rgba(0, 0, 255, 1)">public</span> DateTime SendLastTime { <span style="color: rgba(0, 0, 255, 1)">get</span>; <span style="color: rgba(0, 0, 255, 1)">set</span><span style="color: rgba(0, 0, 0, 1)">; }
</span><span style="color: rgba(0, 128, 128, 1)">24</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span><span style="color: rgba(0, 128, 128, 1)">25</span> }</pre>
</div>
<p><img src="https://images2015.cnblogs.com/blog/214741/201510/214741-20151012001616878-2051749698.png" alt=""></p>
<p>&nbsp;</p>
<p>2. 然后我把【27000】 这个primary关闭掉,通过rs.Status看看“主备情况”。</p>
<p><img src="https://images2015.cnblogs.com/blog/214741/201510/214741-20151012001852768-667927686.png" alt=""></p>
<p>&nbsp;</p>
<p>3. 接下来,我们继续用mongodbHelper执行一下search,看是否能捞取到数据,如果可以,说明一台机器挂了没关系,这个“主备集群”还是活的。</p>
<p><img src="https://images2015.cnblogs.com/blog/214741/201510/214741-20151012002106424-280450258.png" alt=""></p>
<p>&nbsp;</p>
<p>是不是很牛逼的感觉,虽然挂了一台,我的客户端程序还是可以继续从mognodb中获取到刚才插入的数据,好了,大概就说这么多,洗洗睡了,</p>
<p>&nbsp;</p>
<p><span style="font-size: 18pt; color: rgba(255, 0, 0, 1)">最后祝顶着双十一压力的兄弟们,一路平安。</span></p>
<p>&nbsp;</p>
<p>--文件下载--</p><br><br>
来源:https://www.cnblogs.com/huangxincheng/p/4870557.html
頁: [1]
查看完整版本: 双十一来了,别让你的mongodb宕机了