返回首页

介绍
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的项目。:

回答

评论会员:埃尔詹Anlama 时间:2012/02/06
感谢很多

我会尽力更新的文章,加入了一些有用的信息,在未来的日子里
评论会员:窘境 时间:2012/02/06
。唯一的最新教程宽和远
评论会员:埃尔詹Anlama 时间:2012/02/06
谢谢很多
评论会员:奥马尔Gamil 时间:2012/02/06
直奔我的最爱
感谢您埃尔詹;)
评论会员:埃尔詹Anlama 时间:2012/02/06
感谢奥马尔。很高兴看到你的赞赏
评论会员:myker 时间:2012/02/06
第一......很不错的文章和MongoDB的一个很好的介绍。还有什么比对对象存储方案的POCO能够更好,并没有乱奥姆斯,存储过程和所有爵士乐。我真的很喜欢高级的查询在蒙戈文件和更新。从一个数组,你可以做的事情,如递增一个数字,push和pop项目,或使用正则表达式和javascript做一些不错的数据,按摩,无需加载和修改整个文档。这是一个非常优雅和漂亮的系统。

我还想指出,C#的官方驱动程序是NuGet可用。只要搜索"MongoDB的"NuGet探险。 {五}
评论会员:游客 时间:2012/02/06
埃尔詹Anlama:感谢您的意见。我同意你的观点。MongoDB是一个很好的解决,当涉及到面向对象的设计,因为我相信这一事件的最成熟的ORM有时无法删除的面向对象的设计和RDBMS之间的差距。另外,我看着NuGet库找到官方C#MongoDB的驱动程序。{S2的}