C#中使用1.7版本驱动操作MongoDB简单例子
//创建数据库链接
//在1.7的版本驱动中这样写是会报 mongoserver方法已过时的
//mongoserver server = mongodb.driver.mongoserver.create(strconn);
//带有用户名,密码的如下写法,不带的则直接ip+端口就可以
const string connectionstring = "mongodb://city:liyang@192.168.1.211:27017";
//得到一个客户端对象的引用 getserver()对服务器对象的引用
var server = new mongoclient(connectionstring).getserver();
//到一个数据库对象的引用
var client = server.getdatabase("city");
//对一组对象的引用
var collection = client.getcollection<citys>("citys");
//插入一个 实体
for (int i = 0; i < dt.rows.count; i++)
{
collection.insert(new citys
{
province = dt.rows[i][0].tostring(),
city = dt.rows[i][1].tostring(),
county = dt.rows[i][2].tostring(),
areacode = "0" + dt.rows[i][3].tostring(),
postalcode = dt.rows[i][3].tostring()
});
}
以下是git上的帮助文档 地址是:
将一个引用添加到c#司机dll
右键单击 引用 文件夹在visual studio的解决方案 探险家和选择 添加 参考…… 。 导航到文件夹 c#驱动程序dll被安装并添加一个引用以下 dll:
mongodb.bson.dll
mongodb.driver.dll
作为一种替代方法可以使用 nuget 包管理器添加c# 驱动程序包来您的解决方案。
添加所需的 使用 语句
作为一个最低需要使用语句如下:
using mongodb.bson;
using mongodb.driver;
此外,您会经常添加一个或多个使用 声明:
using mongodb.driver.builders;
using mongodb.driver.gridfs;
using mongodb.driver.linq;
还有其他名称空间,只会在特殊的需要 用例。
得到一个客户端对象的引用
最简单的方法获得一个客户对象的引用是使用 连接字符串:
var connectionstring = "mongodb://localhost";
var client = new mongoclient(connectionstring);
如果你想将客户端对象存储在一个全局变量。 mongoclient 是线程安全的。
对服务器对象的引用
要从客户端到服务器对象的引用对象,写 这样的:
var server = client.getserver();
到一个数据库对象的引用
去到一个数据库对象的引用从服务器对象,写 这样的:
var database = server.getdatabase("test"); // "test" is the name of the database
如果您使用多个数据库,调用 getdatabase 再次为每个 您想要使用数据库。
bsondocument 对象模型与您自己的域类
有两种方法可以处理集合:
使用 bsondocument 对象模型
使用自己的域类
您将使用 bsondocument 当数据对象模型 工作是如此的*形式,它将是困难的或不可能的 定义的域类。
因为它是如此容易使用自己的域类 快速启动将假设你要这样做。 c#驱动程序 提供,他们可以处理您的域类:
有一个无参数的构造函数
定义公共读/写数据的字段或属性 存储在数据库中
这些需求在本质上是相同的。net的实施 xmlserializer。
此外,如果您的域类将被用作根 文档必须包含一个 id 字段或属性(通常是命名 id 尽管你可以覆盖,如果必要)。 通常情况下, id 将类型的 objectid ,但没有限制的类型 的成员。
考虑下面的类定义:
public class entity
{
public objectid id { get; set; }
public string name { get; set; }
}
对一组对象的引用
你会得到一个包含引用集合 实体 文件是这样的:
// "entities" is the name of the collection
var collection = database.getcollection<entity>("entities");
插入文档
插入一个 实体 :
var entity = new entity { name = "tom" };
collection.insert(entity);
var id = entity.id; // insert will set the id if necessary (as it was in this example)
找到一个现有的文档
在这个示例中,我们将读回 实体 假设我们知道 id 值:
var query = query<entity>.eq(e => e.id, id);
var entity = collection.findone(query);
查询<单位> .eq 使用 查询< t > 构建器类来构建 查询。 lambda表达式 e = > e.id 是翻译 _id 。 这是 字段的名称存储在数据库中。
请注意
通常的名称字段在数据库中是完全相同的 正如它的名字域类中的字段或属性,但是 id 是一个例外,映射到吗 _id 在数据库中。
其他查询操作符包括: gt , 一种 , 在 , lt , lte , 附近 , 东北 , 和 , 或 (和其他一些更多 专业的)。
保存一个文档
你可以保存更改现有的文档如下:
entity.name = "dick";
collection.save(entity);
更新现有的文档
另一种选择 保存 是 更新 。 所不同的是, 保存 将整个文档发送回服务器,但是 更新 发的变化。 例如:
var query = query<entity>.eq(e => e.id, id);
var update = update<entity>.set(e => e.name, "harry"); // update modifiers
collection.update(query, update);
下面的例子使用了 更新< t > 构建器轻松地构建更新 修饰符。
删除一个现有的文档
删除一个现有的文档集合你写:
var query = query<entity>.eq(e => e.id, id);
collection.remove(query);
你不需要调用连接或断开连接
c#司机有一个连接池使用连接到服务器 效率。 不需要电话 连接 或 断开 ; 让司机照顾连接(调用 连接 是无害的,但是打电话呢 断开 是不好的,因为它关闭 连接池中的连接)。
完整的示例程序
using system;
using system.collections.generic;
using system.linq;
using system.text;
using mongodb.bson;
using mongodb.driver;
using mongodb.driver.builders;
namespace consoleapplication1
{
public class entity
{
public objectid id { get; set; }
public string name { get; set; }
}
class program
{
static void main(string[] args)
{
var connectionstring = "mongodb://localhost";
var client = new mongoclient(connectionstring);
var server = client.getserver();
var database = server.getdatabase("test");
var collection = database.getcollection<entity>("entities");
var entity = new entity { name = "tom" };
collection.insert(entity);
var id = entity.id;
var query = query<entity>.eq(e => e.id, id);
entity = collection.findone(query);
entity.name = "dick";
collection.save(entity);
var update = update<entity>.set(e => e.name, "harry");
collection.update(query, update);
collection.remove(query);
}
}
}