NoSQLMongoDB简单实践:Only CRUD

切续续写了个关于MongoDB的简便示例,涉及到了基础之CRUD。实践的长河遭到,发现多题材,尤其是新老本子的C#叫类库变动较充分,所以产生一部分显眼的题材友好还是摸不着头脑,记录下来,期待您的指点。

无异于、开发环境搭建

是毫无多废话了,可以搜索一下,有不少稿子都介绍了怎样搭建开发环境。如果你想亲尝试一下,参考官方文档的这一篇,按照说明一步一步自己于该地配置一个而出MongoDB应用程序的windows环境。当然了,如果您的条件不是windows,可以选这里的文档,对照设置即可。

次、实体类说明

于demo中,您可以视一个简易的实体类Book,其中饱含四单属性:

using System;

namespace SimpleMongoDBApp
{
    using MongoDB.Bson;

    [Serializable]
    public class Book 
    {
        public Book()
        {
        }

        public Book(string author, string title, DateTime createDate)
        {
            this.Author = author;
            this.Title = title;
            this.CreateDate = createDate;
        }

        public string Author { get; set; }

        public string Title { get; set; }

        public DateTime CreateDate { get; set; }


        /// <summary>
        /// 主键
        /// </summary>
        public ObjectId Id
        {
            get;
            set;
        }
    }
}

得你注意的是主键Id属性的档次是ObjectId。在增删改查中,这个Id的用意是怪主要之。

三、简单的CRUD

安贫乐道说,这绝非什么可说的,只是简单类库调用而已,但是执行的时节要时有发生局部稍微意外,感觉和文档说明的不一致。这里的示范主要是参照这一篇而成的。

1、增删改

就三独相对容易有,对照文档说明,调用对应之几乎单艺术,即可完成增删改之操作。比如对简易的翻新方法:

  public void Update(Book query, Book dest)
   {
            string connectionString = Config.GetCurrentMongoDBConnString();
            MongoServer server = MongoServer.Create(connectionString);
            MongoDatabase database = server.GetDatabase(Config.CurrentDBName);
            using (server.RequestStart(database))
            {
                MongoCollection<Book> books = database.GetCollection<Book>(Config.CurrentTbName);
                QueryDocument condition = new QueryDocument("_id", query.Id);//按照id更新
                Book book = books.FindOne(condition);
                if (book != null)
                {
                    dest.Id = query.Id;
                    books.Save<Book>(dest);
                }
            }
    }

此我下的凡Save函数,我们啊可以调用文档说明遭到之Update方法,最终效果实在是一样的。

2、分页查询

与关系项目数据库一样,查询也足以分很多种,比如精确匹配,范围查询,模糊匹配,分组查询等等。本文的言传身教只是开展了简要的本字段精确匹配,是无限简易的相同种植查询。好当本之类库都出照应之查询方式,您可友善尝试不同类型之错综复杂查询试试看。对于简易的查询直接调用相关Find方法即可,分页查询我们日常经过SetSkip和SetLimit配合使用返回查询结果:

        /// <summary>
        /// 分页查询
        /// </summary>
        public IList<Book> Select(int currentPage, int recordsPerPage, Book query)
        {
            List<Book> listResult = new List<Book>();
            string connectionString = Config.GetCurrentMongoDBConnString();
            MongoServer server = MongoServer.Create(connectionString);
            MongoDatabase database = server.GetDatabase(Config.CurrentDBName);
            MongoCollection<Book> books = database.GetCollection<Book>(Config.CurrentTbName);
            QueryComplete condition = Query.And(Query.EQ("Title", query.Title));//有查询结果
            //QueryComplete condition = Query.And(Query.EQ("Author", query.Author));//无查询结果
            //QueryComplete condition = Query.And(Query.EQ("Title", query.Title), Query.EQ("Author", query.Author));//无查询结果

            MongoCursor<Book> cursors = books.Find(condition).SetSkip((currentPage - 1) * recordsPerPage).SetLimit(recordsPerPage);// books.Find(condition);

            //MongoCursor<Book> cursors = books.FindAs<Book>(condition).SetSkip((currentPage - 1) * recordsPerPage).SetLimit(recordsPerPage);// books.Find(condition);

            //MongoCursor<Book> cursors = books.FindAll().SetSkip((currentPage - 1) * recordsPerPage).SetLimit(recordsPerPage);// books.Find(condition);

            listResult.AddRange(cursors);
            return listResult;
        }

施行的当儿自己发现一个问题,就是以尝以Author属性进行查询的时,一长记下没有(实际匹配结果该不止一漫漫,而且于按TitleNoSQL查询的匹配结果还多),但是本Title数据而可查询有结果,对照文档查找良久,没有找到原因,莫非又是….传说被之rp问题?郁闷。

四、老赵的EasyMongo

对MongDB的外有关方,可以参照官方认证文档,类库已经非常丰富。到此地而或许早就发现了一个题材,就是本身于调用MongoDB相关类库方法的时候,重复的代码较多,比如下面这等同段子:

          string connectionString = Config.GetCurrentMongoDBConnString();
            MongoServer server = MongoServer.Create(connectionString);
            MongoDatabase database = server.GetDatabase(Config.CurrentDBName);
            using (server.RequestStart(database))
            {
                //some code here
            }

就是应运而生许多不善,那什么,大家当然想到如果重构,要动ORM,要更优雅地调用……等等等等。我本来就发现先后中之问题,本来想协调又包一重叠的,让调用更简明舒服一些,但是由看到了老赵的EasyMongo(原来如此强实用的东西牛人早帮我们做好了,看了转源码,感觉与外前的FastReflection差不多复杂,我肯定自己真写不出去),还是一直引进应用了咔嚓。

末尾介绍一个境内挺好之NoSQL学习资源:

http://blog.nosqlfan.com/

demo下载:MongoDBApp

网站地图xml地图