C# Asp.net中简单操作MongoDB数据库

需要引用MongoDB.Driver.dll、MongoDB.Driver.core.dll、MongoDB.Bson.dll三个dll。

同时如果项目报“错误:缺少 System.Runtime.InteropServices.RuntimeInformation.dll version = 4.0.0 ”错误的话,

需要引用System.Runtime.InteropServices.RuntimeInformation.dll ,编译到bin里。


1、数据库连接:

using MongoDB.Driver;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;


namespace MongoDBDemo
{
    public class MongoDb
    {
        //方式一
        private static readonly string connStr = "mongodb://myAdmin:123456@localhost";
        private static readonly string dbName = "myTest";


        //方式二(myTestAdmin用户只可访问数据库myTest)
        //private static readonly string connStr = "mongodb://myTestAdmin:123456@localhost/myTest";
        
        private static IMongoDatabase db = null;


        private static readonly object lockHelper = new object();


        private MongoDb() { }


        public static IMongoDatabase GetMongoDb()
        {
            if (db == null)
            {
                lock (lockHelper)
                {
                    if (db == null)
                    {
                        //方式一
                        var client = new MongoClient(connStr);
                        db = client.GetDatabase(dbName);


                        //方式二(myTestAdmin用户只可访问数据库myTest)
                        //var url = new MongoUrl(connStr);
                        //MongoClientSettings mcs = MongoClientSettings.FromUrl(url);
                        //mcs.MaxConnectionLifeTime = TimeSpan.FromMilliseconds(1000);
                        //var client = new MongoClient(mcs);
                        //db = client.GetDatabase(url.DatabaseName);
                    }
                }
            }
            return db;
        }
    }
}

2、自定义类(model类):

public class BaseEntity
    {
        //字段映射,告诉mongodb这个字段在数据库中对应_id
        [BsonId]
        //告诉mongodb这个字段在数据库中的类型是ObjectId
        [BsonRepresentation(BsonType.ObjectId)]
        public string _id { get; set; }
    }

public class IPInfo : BaseEntity
    {
        public string ip { get; set; }

        public string ipAddress { get; set; }

        public string addTime { get; set; }
    }

public class IPDetails : BaseEntity
    {
        /// 
        /// 主表id
        /// 
        [BsonRepresentation(BsonType.ObjectId)]
        public string parentId { get; set; }
        public string ipAddress { get; set; }
        public string ipNetwork { get; set; }
        public string ipBrowser { get; set; }
        public string addTime { get; set; }
    }

3、业务逻辑:

using MongoDB.Bson;
using MongoDB.Driver;
using MongoDBDemo.model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;

namespace MongoDBDemo.bll
{
    /// 
    /// ip信息主表
    /// 
    public class IPInfoFactory
    {
        /// 
        /// 集合(表)名称
        /// 
        private static readonly string CollectionName = "IPInfo";

        //ip子表名称
        private static readonly string ChildCollectionName = "IPDetail";

        private static IMongoDatabase db = MongoDb.GetMongoDb();

        public static List GetAllList()
        {
            try
            {
                var collection = db.GetCollection(CollectionName);
                List list = collection.Find(new BsonDocument()).ToList();
                return list;
            }
            catch (Exception ex)
            {
                return null;
            }
        }

        /// 
        /// 获取
        /// 
        /// 
        /// 
        public static IPInfo Get(string id)
        {
            try
            {
                var IPInfoCollection = db.GetCollection(CollectionName);
                var filter = Builders.Filter.Eq("_id", id);
                var item = IPInfoCollection.Find(filter).FirstOrDefault();
                return item;
            }
            catch (Exception ex)
            {
                return null;
            }
        }

        /// 
        /// 插入主表
        /// 
        /// 
        public static bool Add(string ip, string ipAddress)
        {
            try
            {
                var IPInfoCollection = db.GetCollection(CollectionName);

                IPInfo ipInfo = new IPInfo();
                ipInfo.ip = ip;
                ipInfo.ipAddress = ipAddress;
                ipInfo.addTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:fff");
                IPInfoCollection.InsertOne(ipInfo);

                return true;
            }
            catch (Exception ex)
            {
                return false;
            }
        }

        /// 
        /// 修改
        /// 
        /// 
        /// 
        public static bool Update(IPInfo model)
        {
            try
            {
                var IPInfoCollection = db.GetCollection(CollectionName);

                var filter = Builders.Filter.Eq("_id", model._id);
                IPInfoCollection.ReplaceOne(filter, model);
                return true;
            }
            catch (Exception ex)
            {
                return false;
            }
        }

        /// 
        /// 删除
        /// 
        /// 
        /// 
        public static bool Delete(string id)
        {
            try
            {
                var IPInfoCollection = db.GetCollection(CollectionName);
                var filter = Builders.Filter.Eq("_id", id);
                IPInfoCollection.DeleteOne(filter);
                return true;
            }
            catch (Exception ex)
            {
                return false;
            }
        }

        /// 
        /// 插入主表、子表:
        /// 主表:有则不插入,无则插入;
        /// 子表:一条数据都没有,则插入,已经存在数据,判断是否存在一条相同数据,存在则不插入,不存在则插入。
        /// 
        /// 
        public static bool AddIPInfoAndDetail(string ip, string ipAddress, string ipNetwork, string ipBrowser)
        {
            try
            {
                var IPInfoCollection = db.GetCollection(CollectionName);
                var IPDetailCollection = db.GetCollection(ChildCollectionName);

                //判断主表是否已经存在
                var pFilter = Builders.Filter.Eq("ip", ip);
                var parentItem = IPInfoCollection.Find(pFilter).FirstOrDefault();
                if (parentItem == null)
                {
                    //插入主表
                    IPInfo ipInfo = new IPInfo();
                    ipInfo.ip = ip;
                    ipInfo.ipAddress = ipAddress;
                    ipInfo.addTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:fff");
                    IPInfoCollection.InsertOne(ipInfo);

                    //插入子表
                    string parent_id = string.Empty;
                    //刚插入的主表
                    var parentItemNew = IPInfoCollection.Find(pFilter).FirstOrDefault();
                    if (parentItemNew != null)
                    {
                        parent_id = parentItemNew._id;
                        AddChild(parent_id, ipAddress, ipNetwork, ipBrowser);
                    }
                }
                else
                {
                    string parent_id = parentItem._id;
                    var childFilter1 = Builders.Filter.Eq("parentId", parent_id);
                    var childItem = IPDetailCollection.Find(childFilter1).FirstOrDefault();
                    if (childItem == null)
                    {
                        AddChild(parent_id, ipAddress, ipNetwork, ipBrowser);
                    }
                    else
                    {
                        //如果没有类似的数据,则插入
                        var filterBuilder = Builders.Filter;
                        var childFilter2 = filterBuilder.Eq("parentId", parent_id)
                            & filterBuilder.Regex("ipNetwork", new BsonRegularExpression(new Regex(ipNetwork)))
                            & filterBuilder.Regex("ipBrowser", new BsonRegularExpression(new Regex(ipBrowser)));
                        var childItem2 = IPDetailCollection.Find(childFilter2).FirstOrDefault();
                        if (childItem2 == null)
                        {
                            AddChild(parent_id, ipAddress, ipNetwork, ipBrowser);
                        }
                    }
                }

                return true;
            }
            catch (Exception ex)
            {
                return false;
            }
        }

        /// 
        /// 插入子表
        /// 
        /// 
        public static bool AddChild(string parentId, string ipAddress, string ipNetwork, string ipBrowser)
        {
            try
            {
                var IPDetailCollection = db.GetCollection(ChildCollectionName);
                IPDetails ipDetails = new IPDetails();
                ipDetails.parentId = parentId;
                ipDetails.addTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:fff");
                ipDetails.ipAddress = ipAddress;
                ipDetails.ipNetwork = ipNetwork;
                ipDetails.ipBrowser = ipBrowser;
                IPDetailCollection.InsertOne(ipDetails);

                return true;
            }
            catch (Exception ex)
            {
                return false;
            }
        }
    }
}

4、增删改查操作:

class Program
    {
        static void Main(string[] args)
        {
            try
            {                
                //插入
                //var addResult1 = IPInfoFactory.AddIPInfoAndDetail("127.0.0.1", "中国上海", "华东电信", "360");
                var addResult = IPInfoFactory.Add("127.0.0.1", "中国上海");                

                //查询
                var list = IPInfoFactory.GetAllList();
                Console.WriteLine(JsonConvert.SerializeObject(list));

                //修改
                var item = IPInfoFactory.Get("5b441a337c210a1cfc409558");
                item.ipAddress = "SH";
                var updateResult = IPInfoFactory.Update(item);
                                
                //删除
                var deleteResult = IPInfoFactory.Delete("5b447dd79be4bb134c70d9c4");

                Console.ReadKey();
            }
            catch (Exception ex)
            {
                Console.WriteLine("错误:" + ex.Message);
            }
            finally
            {
                Console.ReadKey();
            }

        }
    }

使用Robomongo工具可以看到mongodb数据库数据:

C# Asp.net中简单操作MongoDB数据库_第1张图片

代码下载:https://download.csdn.net/download/coderk2014/10533230

 
 

你可能感兴趣的:(C#,MongoDB)