介绍
MongoDB是一个吸引人的申请人,在NoSQL的世界提供很大的支持与驱动器,全面的文件,来构建应用程序的一个相当大的社会使用NoSQL技术,而不是直接到RDBMS的,如MS SQL Server和Oracle。
在这篇文章中,我想描述如何使用MongoDB的官方C#的驱动程序。有几个替代此驱动程序,其中有些人甚至认为更好,提供额外的功能,如LINQ支持,但我喜欢在我的项目中使用该驱动程序,因为它是正式支持。
代码样本取自示范项目。我建议你检查的示范项目,因为你会更好地理解和有尝试MongoDB的选择。关于MongoDB的数据结构的几句话
在MongoDB,数据结构和层次结构,如:Databases
Collections
Documents
Fields
字段是一个键 - 值对。一个关键是出了名(字符串)。 A的值是一个基本类型如字符串,整数,浮点数,时间戳,二进制等,或笔,或值的数组。
总之,集合JSON类的文件。这是最大的区别从传统RDBMSa的,所以要尽量把你的数据,因为他们是真正的对象,而不是纯数据。此外,您会看到与BSON开始在官方驱动的类。
,BSON从bsonspec.org定义是一个JSON类的文件二进制编码序列。 BSON被设计为轻巧,穿越,高效。BSON一样,JSON的,支持嵌入对象和其他对象和数组的数组内。准备
首先,从以下地址下载一个适当的MongoDB的包和执行mongod.exe的开始你的MongoDB服务器。{A}
如果你在开始你的服务器与路径有关的问题,创建一个文件夹来存储数据库文件和DBPATH参数启动mongod.exe文件夹的路径,在下面一行所示:{C}
为了使用此驱动程序,下载所需的程序集文件从下面的链接:{A2的}。
这是一个地方,你可以获取源代码,并下载安装程序包。当你下载一个合适的包并安装它,你就能找到以下根据路径Program Files文件夹\ MongoDB的\ CSharpDriver 1.2装配文件。顺便说一下,我用在这篇文章CSharpDriver 1.2.0.4274.msi。MongoDB.Bson.dllMongoDB.Driver.dll
您需要添加这两个文件在您的项目参考。 MongoDB.Bson.dll BSON系列化和其他数据库通信。现在,你准备开发您的项目使用MongoDB。服务器启动
首先,你应该确保MongoDB是运行,并且您指向的端口的服务器上的正确运行。下面你看到的输出,当您启动MongoDB服务器在命令行。
{S0的}
在屏幕上,端口标有一个红色的框。然后,运行mongo.exe启动MongoDB的控制台,并运行以下行创建数据库:use MessageDB
现在,你已完成MongoDB服务器。应用
我们将使用这两个命名空间,与我们的MongoDB服务器和数据通信处理,因此,添加以下行:{体C3}
在这些线路中,我们创建一个服务器对象,并传递凭据,连接字符串,港口等,在这个例子中,如所需的设置,我们使用本地主机作为数据库服务器
作为服务器的端口27017。然后,我们访问的数据库,MessageDB,这是我们之前创建的。与数据库的对象,我们准备的CRUD操作。阅读{的C4}
官方的驱动程序提供了许多方法来访问和处理数据。在上面的线,我们首次访问用户的集合,有序的形式使用的CREATEDATE值。它也可以通过索引访问集合或其他兼容的集合[],像datasase [quot; usersquot;]。{C5的}
之后,我们得到的结果无论是在BSON或强类型的对象格式,我们可以遍历。
它可以编写复杂的查询,使用查询。{5233}
,您可以获取从对象这样评价MongoDB的符号转化的查询:
{S}
编辑
当我们得到的数据,我们可以编辑的值直接有关集合通过调用Save方法保存更新的文件。在下面的行,我们获得一份独特的文件,通过提供的ID值。
的ID值是一种特殊类型的领域,这是由创建数据库本身提供每个文件的唯一性,因此它可以轻易得到的文件。 ID值实际上包含像4ea41ac244b8681c3072b212字符串值,所以很容易通过此值,每个请求。
的FindOneById的的方法得到一个BsonValue。为了通过ID值作为BsonValue的,我们称之为ObjectId.Parse获得适当的格式ID值BsonValue。
最后,我们呼吁保存更新编辑的文档。插入
添加新的文件是非常简单的编辑他们。你创建了一个集合的参考,创建一个的新BsonDocument,并把它添加到集合通过调用插入的参考。{C8的}动态模式
到现在为止,我们认为基本对象和处理他们的CRUD操作。正如你可以看到,我们并没有定义任何模式的具体设置。当我们设置一个值领域的关键BsonDocument,会自动创建与给定值的类型。在下列情况下,当我们执行以下行:user["age"] = 18;
年龄关键是自动创建的字段类型是Int32。你也可以选择检查的关键,如果存在通过调用包含对象的方法,确定这是与一个给定类型兼容,将转换正确,像:{C10的}
我提到的动态模式,我想使我的用户对象动态:{C11的}
在这些线路中,我们改变了我们的用户对象的结构。我们提出了新的数据类型,备注。
首先,我们检查,如果用户对象已经包含了一个关键的言论元素。言论实际上是一个数组,其中包含内容日期值。如果言论的存在,我们将它转换到一个数组,并添加了一个新的说法。否则,我们创建了一个新的数组类型,并给它添加新的说法。这一切。用户对象的输出会是这样的:{C12的}对象序列化
驱动程序支持的文档对象的序列化。这意味着,你不需要访问字段和值的字符串值,但强类型的值。让我们看一下这个动作。
我们有两个对象,用户和备注。public class User
{
public User()
{
Remarks = new List<Remark>();
}
public ObjectId id { get; set; }
[BsonElementAttribute("firstname")]
public string FirstName { get; set; }
[BsonElementAttribute("lastname")]
public string LastName { get; set; }
[BsonElementAttribute("age")]
public int Age { get; set; }
[BsonElementAttribute("createdate")]
public DateTime CreateDate { get; set; }
[BsonElementAttribute("remarks")]
public IList<Remark> Remarks { get; set; }
public string GetFullName()
{
return String.Format("{0} {1}", FirstName, LastName);
}
}
public class Remark
{
[BsonElementAttribute("content")]
public string RemarkContent;
[BsonElementAttribute("date")]
public DateTime Date;
}
我们使用说明BsonAttributes场BsonDocument对象匹配的属性。此外,介意,我们定义这是一个特殊的属性OBJECTID类型,存储BsonDocuments的ID值。如果该属性的名称是一样的该领域的关键,你不需要任何属性,因为我们在id属性中没有说明。
这里是如何实现这个序列:var user = database.GetCollection("users").FindOneByIdAs<User>(ObjectId.Parse(id));
该驱动器采用的方法作为结束。在一般情况下,这些方法可检索强类型的格式的文件。因此,我们可以保持NoSQL的数据和面向对象之间的桥梁。最后的话
我想在这篇文章中介绍MongoDB和如何使用官方的C#的驱动程序是什么。当然,这些都是基本点,但MongoDB的最常用的功能,所以它是大于在这篇文章中说明。它提供了强大的功能,如GridFS和MapRedure,您可能需要在某些领域,同时发展与MongoDB的项目。: