余夜 發表於 2020-6-11 16:16:00

MongoDB(10):在C#中使用MongoDB

<h2>一、添加MongoDB引用</h2><p>想要在C#中使用MongoDB,首先安装支持MongoDB的C#版的驱动。</p><p><img title="image" style="border: 0 currentColor; display: inline; background-image: none; border-image: none" border="0" alt="image" src="https://img2020.cnblogs.com/blog/24244/202007/24244-20200707143034834-790989834.png" width="640" height="431"></p><p>利用MongoDB官方发布的C#驱动,可通过网络下载或nuget安装,得到MongoDB相关的dll,添加到项目中引用。</p><p>https://docs.mongodb.com/drivers/csharp/</p><h3>1、通过NuGet方式添加</h3><p>第一步:在项目中右键,选择管理NuGet管理包</p><p><img title="image" style="margin: 0; border: 0 currentColor; display: inline; background-image: none; border-image: none" border="0" alt="image" src="https://img2020.cnblogs.com/blog/24244/202006/24244-20200611161611188-1200343813.png" width="441" height="372"></p><p>第二步:搜索MongoDB,选择MongoDB.Driver添加,我这里已经添加过了所以没有添加按钮</p><p><img title="image" style="margin: 0; border: 0 currentColor; display: inline; background-image: none; border-image: none" border="0" alt="image" src="https://img2020.cnblogs.com/blog/24244/202006/24244-20200611161612597-842790496.png" width="1024" height="519"></p><p>通过这两步,会在项目中自动添加MongoDB.Bson(序列化、Json相关)、MongoDB.Driver(驱动程序)、MongoDB.Driver.Core等引用</p><p><img title="image" style="margin: 0; border: 0 currentColor; display: inline; background-image: none; border-image: none" border="0" alt="image" src="https://img2020.cnblogs.com/blog/24244/202006/24244-20200611171709281-1879906405.png" width="345" height="618"></p><h2>二、使用方法</h2><h3>1、连接数据库</h3><p>在连接数据库之前,请确保MongoDB数据库服务已经启动。</p><div class="cnblogs_code" style="padding: 5px; border: 1px solid rgba(204, 204, 204, 1); background-color: rgba(245, 245, 245, 1); border-image: none">   <pre><span style="color: rgba(0, 0, 255, 1)">using</span><span style="color: rgba(0, 0, 0, 1)"> MongoDB.Bson;
</span><span style="color: rgba(0, 0, 255, 1)">using</span><span style="color: rgba(0, 0, 0, 1)"> MongoDB.Driver;

</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">1.连接字符串(mongodb数据库默认端口为:27017)</span>
<span style="color: rgba(0, 0, 255, 1)">string</span> connStr = <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">mongodb://127.0.0.1:27017</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, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">2.创建连接MongoClient实例实际上代表了一个到数据库的连接池,即使有多个线程,也只需要一个MongoClient类的实例</span>
<span style="color: rgba(0, 0, 255, 1)">var</span> client = <span style="color: rgba(0, 0, 255, 1)"><span style="background-color: rgba(255, 255, 0, 1)">new</span></span><span style="color: rgba(0, 0, 0, 1)"><span style="background-color: rgba(255, 255, 0, 1)"> MongoClient(connStr);</span>

</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">3.使用client的GetDatabase方法获取数据库,即使该数据库不存在,也会自动创建;</span>
IMongoDatabase db = <span style="background-color: rgba(255, 255, 0, 1)">client.GetDatabase(<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></pre>
</div>

<h3>2、操作数据</h3>

<p>三个对象, client是连接数据库的客户端, database对应库, collection是对象集合。对对象的操作是针对collection集合。</p>

<div class="cnblogs_code" style="padding: 5px; border: 1px solid rgba(204, 204, 204, 1); background-color: rgba(245, 245, 245, 1); border-image: none">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">4.获取数据集 collection;BsonDocument是在数据没有预先定义好的情况下使用的。</span>
IMongoCollection&lt;BsonDocument&gt; collection = db<span style="background-color: rgba(255, 255, 0, 1)">.GetCollection&lt;BsonDocument&gt;(<span style="color: rgba(128, 0, 0, 1)">"</span></span><span style="color: rgba(128, 0, 0, 1)">runoob1</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, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">5.插入一条数据;</span>
<span style="color: rgba(0, 0, 255, 1)">var</span> document = <span style="color: rgba(0, 0, 255, 1)">new</span> BsonDocument { { <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(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">name</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)">aa</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> } };
collection.<span style="background-color: rgba(255, 255, 0, 1)">InsertOne</span>(document);


</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">6.查询数据1</span>
<span style="color: rgba(0, 0, 255, 1)">var</span> res = collection.<span style="background-color: rgba(255, 255, 0, 1)">Find</span>(<span style="color: rgba(0, 0, 255, 1)">new</span> BsonDocument()).<span style="background-color: rgba(255, 255, 0, 1)">ToList</span>(); <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">查询整个数据集</span>
<span style="color: rgba(0, 0, 255, 1)">foreach</span> (<span style="color: rgba(0, 0, 255, 1)">var</span> item <span style="color: rgba(0, 0, 255, 1)">in</span><span style="color: rgba(0, 0, 0, 1)"> res)
{
    Console.WriteLine(item);
}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">6.查询数据2</span>
<span style="color: rgba(0, 0, 255, 1)">var</span> res_a = collection.Find(<span style="color: rgba(0, 0, 255, 1)">new</span> BsonDocument()).<span style="background-color: rgba(255, 255, 0, 1)">FirstOrDefault</span>(); <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">查询当前数据集的第一条数据,没有则返回null</span>
<span style="color: rgba(0, 0, 0, 1)">Console.WriteLine(res_a);


</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">6.升序降序查询3:</span>
<span style="color: rgba(0, 0, 255, 1)">var</span> sort_ascending = <span style="background-color: rgba(255, 255, 0, 1)">Builders</span>&lt;BsonDocument&gt;.<span style="background-color: rgba(255, 255, 0, 1)">Sort</span>.Ascending(<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(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">根据id升序</span>
<span style="color: rgba(0, 0, 255, 1)">var</span> sort_descending = Builders&lt;BsonDocument&gt;.Sort.Descending(<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(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">根据id降序
<span style="color: rgba(0, 0, 255, 1)">var</span> res_c = collection.Find(<span style="background-color: rgba(255, 255, 0, 1)">Builders&lt;BsonDocument&gt;.Filter.<span style="background-color: rgba(255, 255, 0, 1)">Lt</span></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)">10</span>) &amp; <span style="background-color: rgba(255, 255, 0, 1)">Builders&lt;BsonDocument&gt;.Filter.Gte</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="background-color: rgba(255, 255, 0, 1)">Limit</span>(<span style="color: rgba(128, 0, 128, 1)">50).<span style="background-color: rgba(255, 255, 0, 1)">Sort(sort_ascending</span></span>).<span style="background-color: rgba(255, 255, 0, 1)">ToCursor</span>(); <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">查询id小于10,大于2的数据</span>
<span style="color: rgba(0, 0, 255, 1)">foreach</span> (<span style="color: rgba(0, 0, 255, 1)">var</span> item <span style="color: rgba(0, 0, 255, 1)">in</span><span style="color: rgba(0, 0, 0, 1)"> res_c.ToEnumerable())
{
    Console.WriteLine(item);
}

</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">7.更新数据,更新支持添加新的field, 如:</span>
collection.<span style="background-color: rgba(255, 255, 0, 1)">UpdateMany</span>(Builders&lt;BsonDocument&gt;.Filter.Eq(<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="background-color: rgba(255, 255, 0, 1)">Builders&lt;BsonDocument&gt;.Update.Set</span>(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">name</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)">hello</span><span style="color: rgba(128, 0, 0, 1)">"</span>));   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">将id字段为2的名字都改为“hello”;

</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">8.删除</span>
collection.<span style="background-color: rgba(255, 255, 0, 1)">DeleteMany</span>(Builders&lt;BsonDocument&gt;.Filter.Eq(<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></pre>
</div>

<p>mongodb对程序员是极友好的, 可以动态变化的结构, 让程序员不再害怕频繁变动的需求。</p><br><br>
来源:https://www.cnblogs.com/springsnow/p/13093956.html
頁: [1]
查看完整版本: MongoDB(10):在C#中使用MongoDB