`
baobeituping
  • 浏览: 1071510 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

MongoDB学习笔记三一C#操作数据库

 
阅读更多
目标:向数据库插入两条Notes,一个包含标签一个没有,然后通过Update给不包含标签的Notes添加标签

    为了完成我们的目标,首先我们的到http://github.com/samus/mongodb-csharp 下载Mongodb的c#驱动,解压缩并打开Visual Studio解决方案,然后编译得到两个DLL的:MongoDB.Driver.dll、MongoDB.Linq.dll 。我们用json.net来实现序列化和反序列化,您可以从这里下载 。

    接着我们用vs2010创建一个简单的控制台应用程序,这里提供三种用C#操作MongoDB的方法:1.使用JSON 2.使用序列化/反序列化的Json.Net 3.使用动态代理

  一、这里我们创建一个帮助类(MongoJson.cs)来实现数据库Document和C# 实体类之间的映射:

using System.Collections.Generic;
using System.Linq;
using MongoDB.Driver;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

namespace Pls.MdbIntro
{
    public class MongoJson
    {
        private const string _oidContainerName = "_id";

        public T ObjectFrom<T>(Document document)
            where T : class, IMongoEntity
        {
            if (document == null)
                return null;

            return JsonConvert.DeserializeObject<T>(document.ToString());
        }

        public Document DocumentFrom(string json)
        {
            return PopulateDocumentFrom(new Document(), json);
        }

        public Document DocumentFrom<T>(T item)
            where T : class, IMongoEntity
        {
            return PopulateDocumentFrom(new Document(), item);
        }

        public Document PopulateDocumentFrom<T>(Document document, T item)
            where T : class, IMongoEntity
        {
            if (item == null)
                return document;

            var json = JsonConvert.SerializeObject(item, Formatting.None);

            return PopulateDocumentFrom(document, json);
        }

        private Document PopulateDocumentFrom(Document document, string json)
        {
            var keyValues = JsonConvert.DeserializeObject<Dictionary<string, object>>(json);

            foreach (var keyValue in keyValues)
            {
                var isEmptyKeyField = (
                                          keyValue.Key == _oidContainerName && document[_oidContainerName] != MongoDBNull.Value);

                if (isEmptyKeyField)
                    continue;

                var value = keyValue.Value ?? MongoDBNull.Value;

                if (value != MongoDBNull.Value)
                {
                    var arrayValue = (keyValue.Value as JArray);
                    if (arrayValue != null)
                        value = arrayValue.Select(j => (string)j).ToArray();
                }

                if (document.Contains(keyValue.Key))
                    document[keyValue.Key] = value;
                else
                {
                    if (value != MongoDBNull.Value)
                        document.Add(keyValue.Key, value);
                }
            }

            return document;
        }
    }
}

二、创建Note实体类

    public interface IMongoEntity
    {
        string _id { get; set; }
        Oid GetOid();

        Document GetAsDocument();
        void UpdateFromDocument(Document document);
    }



  [Serializable]
    public class Note
        : IMongoEntity
    {
        public virtual string _id { get; set; }
        public virtual string Title { get; set; }
        public virtual string Body { get; set; }
        public virtual string[] Tags { get; set; }

        public virtual Oid GetOid()
        {
            return new Oid(_id);
        }

        public virtual Document GetAsDocument()
        {
            throw new NotImplementedException();
        }

        public virtual void UpdateFromDocument(Document document)
        {
            throw new NotImplementedException();
        }
    }

三、编写测试代码

            var json = new MongoJson();
            var mongo = new Mongo();

            mongo.Connect();

          
            var db = mongo["SimpleNotes"];
            db.SendCommand("dropDatabase");
            var notes = db["Notes"];

            PrintNotes("Initial notes", notes);

            //创建一个包含Tags的Note
            var firstNoteDocument = json.DocumentFrom("{Title : \"First note using Json.\",         Body : \"Some nice text.\", Tags : [\"MongoDB\", \"Getting started\"]}");
            notes.Insert(firstNoteDocument);



           //创建不包含Tags的Note
            var secondNoteDocument = json.DocumentFrom("{Title : \"Second note using Json.\", Body : \"Some nice text.\"}");
            notes.Insert(secondNoteDocument);



           //查询Tags为空的Note并更新添加Tags
            var noteDocument = notes.FindOne(new Document { { "Tags", MongoDBNull.Value } });
            noteDocument.Update(json.DocumentFrom("{Tags : [\"The tag\"]}"));

            notes.Update(noteDocument);

          

            mongo.Disconnect();


分享到:
评论

相关推荐

    MongoDB学习笔记1

    在本文中,我们将深入探讨 MongoDB 的基础知识以及如何使用 C# 的 samus 驱动进行数据操作。 首先,MongoDB 提供了多种语言的驱动程序,包括 C#。在 C# 中,有两个常用的 MongoDB 驱动:官方驱动和 samus 驱动。...

    MongoDB学习笔记(五) MongoDB文件存取操作

    此外,MongoDB还提供了丰富的API和工具,如MongoDB C#驱动程序,以简化GridFS的操作。 在使用MongoDB进行文件存取时,应考虑以下最佳实践: - 定期备份数据,特别是对于重要的文件。 - 考虑文件的访问模式,优化...

    MongoDB学习笔记—Linux下搭建MongoDB环境

    MongoDB是一种开源数据库系统,由C++语言编写,旨在为Web应用提供可扩展的高性能数据存储解决方案。...在学习过程中,不断实践和理解MongoDB的特性和操作方法,将有助于你更好地利用这个强大的数据库系统。

    MongoDB学习笔记(四) 用MongoDB的文档结构描述数据关系

    在本篇MongoDB学习笔记中,我们将探讨如何利用MongoDB的文档结构来描述数据关系。 首先,MongoDB中的“集合”(collection)与关系型数据库中的“表”类似,但两者存在显著差异。在关系型数据库中,表的结构是预定义...

    数据库学习笔记

    总的来说,"数据库学习笔记"涵盖了数据库基础、C#数据库编程、设计原则、性能优化、安全性和云服务等多个方面,无论你是初学者还是有经验的开发者,都能从中获取宝贵的知识和实践经验。通过深入学习和实践,你将能够...

    MongoDB学习笔记(二) 通过samus驱动实现基本数据操作

    传统的关系数据库一般由数据库(database)、表(table)、记录(record)三个层次概念组成,MongoDB是由(database)、集合(collection)、文档对象(document)三个层次组成。MongoDB对于关系型数据库里的表,...

    MongoDB学习笔记(一) MongoDB介绍与安装方法

    MongoDB 是一种高性能、开源、无模式的文档型数据库,属于 NoSQL 数据库中的热门选择。它使用 C++ 开发,适用于替代传统的关系型数据库或键/值存储方式,尤其适合大规模 Web 应用和处理大量数据。MongoDB 的特点是高...

    MongoDB学习笔记之GridFS使用介绍

    MongoDB的GridFS是一个强大的文件存储系统,设计用于在数据库中存储和检索大量的小文件。GridFS将大文件拆分成多个小块(chunks),每个块的大小默认为256KB,以便更有效地管理和检索数据。它利用MongoDB的数据模型...

    【高分项目】基于mongodb改造Chengfeng【源码+论文+学习笔记+操作手册].zip

    【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、...

    NodeJS学习笔记之MongoDB模块

    MongoDB 是一种基于分布式文件存储的数据库,由 C++ 编写,专为 WEB 应用提供可扩展的高性能数据存储解决方案。作为 NoSQL 数据库的一员,MongoDB 是一款高性能、开源、无模式的文档型数据库,具有丰富的功能且与...

    mongodb官网文档集合

    ### MongoDB官网文档集合:全方位解析...不仅包含了产品特性的详细介绍,还有针对开发者和管理员的实际操作指南,以及对技术原理的深度剖析,对于任何希望深入了解和熟练掌握MongoDB的人来说,都是不可或缺的学习资源。

    数据库项目讲解_gotxei_数据库项目_

    这涉及到选择合适的数据库管理系统(如MySQL、Oracle、SQL Server或MongoDB等),进行数据库模式设计,编写SQL语句进行数据操作,并确保数据的安全性和完整性。 在源程序部分,我们可以期待看到与数据库交互的应用...

    twb笔记代码代码

    5. **数据库操作**:数据库管理是许多应用程序的核心,笔记可能包括SQL查询、关系型数据库(如MySQL、PostgreSQL)和非关系型数据库(如MongoDB)的基本操作。 6. **版本控制**:Git是开发者常用的版本控制系统,...

    onenote linux 开发环境

    总结来说,在Linux环境下搭建OneNote开发环境,你需要熟练掌握Linux操作系统,选择合适的开发工具,理解C#和.NET框架,熟悉数据库操作,深入研究OneNote API,以及考虑跨平台兼容性和实施CI/CD流程。这个过程既挑战...

    笔记生成源码+所需资源.rar

    7. **数据存储与管理**:笔记数据的存储可能采用了数据库(如SQLite、MySQL或MongoDB)或者文件系统(如JSON、XML或文本文件)。理解数据模型和存储机制对于备份、恢复和同步笔记至关重要。 8. **文本处理**:笔记...

    strasnote:核心-API,数据库,加密等

    C#有ADO.NET库,可以方便地连接和操作各种类型的数据库。此外,Entity Framework这样的ORM(Object-Relational Mapping)工具可以让开发者以面向对象的方式处理数据,减少与数据库交互时的代码复杂性。 再来说说...

    笔记:读书笔记,读书笔记

    :open_book: 读书笔记 :slightly_smiling_face: :upside-down_face: 买过很多书,也打印过很多电子版的书籍和资料,断断续续的读,杂乱无章。心血来潮,想自己整理一下,希望可以坚持下去,不断学习,不断提升自己。...

    毕设&课程作业_智能笔记管理系统.zip

    通过阅读源代码,我们可以了解到具体的编程语言(如Java、Python或C#)、框架(如Spring Boot或Django)以及数据存储技术(如MySQL或MongoDB)的运用。设计文档则会阐述系统架构、模块划分和交互流程,而测试报告则...

Global site tag (gtag.js) - Google Analytics