namespace IntroMongo.Models
{
public class MongoWrapper
{
public static MongoDatabase GetDatabase()
{
MongoServerSettings settings = new MongoServerSettings();
settings.Server = new MongoServerAddress("localhost", 27017);
MongoServer server = new MongoServer(settings);
var database = server.GetDatabase("MessageDB");
return database;
}
}
}
这里,我们需要创建了一个服务器对象,并且需要设置连接字符串,端口等信息。在这个例子中,我们使用localhost作为数据库服务器地址,27017作为服务器端口,MessageDB作为数据库名称(这里最好称为集合)。
public class Remark
{
[BsonElementAttribute("content")]
public string RemarkContent;
[BsonElementAttribute("date")]
public DateTime Date;
} 11.5.4 查询
C#官方驱动提供多种方法来访问和处理数据库,具体可以查看驱动包中CSharpDriverDocs.chm说明文档。这里我们需要查询到所有用户的集合并按照创建时间倒序显示。
var users = database.GetCollection("users").
FindAll().
SetSortOrder(SortBy.Descending("createdate"));
foreach (var user in users)
{
var userName = user["firstname"].AsString;
...
}
当然我们也可以写个稍微复杂点的查询,比如:用户名以大写字母E开头,而且创建时间必须在近7天,那么查询方法应该这么的写:
var query = Query.And(
Query.Matches("firstname", BsonRegularExpression.Create("^e")),
Query.GT("createdate",
BsonValue.Create(DateTime.Now.AddDays(-7).Date)));
var users = database.
GetCollection("users").
Find(query).
SetSortOrder(SortBy.Descending("createdate")); 11.5.5 编辑
数据的编辑分为两个步骤首先从数据库查询数据绑定到页面表单中,显示给用户供用户修改。
var objectId = ObjectId.Parse(id);
var user = MongoWrapper.GetDatabase().
GetCollection("users").
FindOneByIdAs(ObjectId.Parse(id));
用户提交修改后的信息时候,这时候只需调用保存更新方法“SAVE”即可完成编辑。
var user = users.FindOneById(ObjectId.Parse(id));
user["firstname"] = userToEdit.FirstName;
user["lastname"] = userToEdit.LastName;
user["age"] = userToEdit.Age;
users.Save(user);
这里FindOneById方法获取的是一个BsonValue,其中传递的参数id需要调用ObjectId.Parse方法将string转为ObjectId。
if (user.Contains("updatedate") && user["updatedate"].IsDateTime)
{
var updatedate = user["updatedate"].AsDateTime;
}
下面我们来看看任何给用用户添加评论,如下:
[HttpPost]
public ActionResult Index(string id, string newRemark)
{
var users = database.GetCollection("users");
var user = users.FindOneById(ObjectId.Parse(id));
var remark = new BsonDocument().
Add("content", newRemark).
Add("date", DateTime.Now);
if (user.Contains("remarks"))
{
user["remarks"].AsBsonArray.Add(BsonValue.Create(remark));
}
else
{
user["remarks"] = new BsonArray().Add(BsonValue.Create(remark));
}
users.Save(user);
return RedirectToAction("Index", new { id = id });
}
首先,我们需要检查用户对象中是否已经存在一个remarks的key,这里remarks实际上是个数组里面可能存有多条留言,每条留言有content和data两个key。如果remarks存在的话我们就继续添一个新的remark到remarks数组中,如果不存在的话我们需要创建一个新的数组然后添加。这样从数据库查询得到数据库结构将会得到类似这样的一个结果:
{
"_id" : ObjectId("4ea51941073d601758138560"),
"firstname" : "ercan",
"lastname" : "anlama",
"age" : 26,
"createdate" : ISODate("2011-10-24T07:52:33.29Z"),
"remarks" :
[
{
"content" : "this is my first remark",
"date" : ISODate("2011-10-24T07:53:22.511Z")
}
]
} 11.5.9 写在最后的话
这篇文章对MongoDB和C#的官方驱动做了一个大概的介绍,当然这些都是一些最基本的东西,属于必须要掌握的东西。
此为MongoDB还提供更强大的功能,如GridFS和MapReduce。这些功能或许能对你现在所专注的领域能起到一定的帮助。
本文参考CodeProject上Using MongoDB with the Official C# Driver文章加上自己理解谈不上翻译,简单的写写。
原文作者:Ercan Anlama(Turkey)
作者简介:I started to development during university years and worked in many freelance projects. I am working in software development more than 4 years and currently, working as analyst software developer in an Holland centre company in Istanbul, Turkey. I am interested in innovation and creativity in software development and passionate in learning new stuff.
原文网址:http://www.codeproject.com/KB/database/MongoDBWithOfficeDriver.aspx
License
版权归原作者所有。
This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)
源代码可以前往codeproject下载,或者我从我这里下载
下载地址:源码 官方驱动1.3.1