zoukankan      html  css  js  c++  java
  • C# Asp.net中简单操作MongoDB数据库(二)

    C# Asp.net中简单操作MongoDB数据库(一)    , mongodb数据库连接可以回顾上面的篇幅。 

    1、model类:
       public class BaseEntity
        {
            /// <summary>
            /// 字段映射,告诉mongodb这个字段在数据库中对应_id
            /// </summary>
            [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
        {
            /// <summary>
            /// 主表id
            /// </summary>
            [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; }
        }
    
    自定义实体类
    2、基本操作:
    public class IPInfoFactory
        {
            /// <summary>
            /// 集合(表)名称
            /// </summary>
            private static readonly string CollectionName = "IPInfo";
    
            //ip子表名称
            private static readonly string ChildCollectionName = "IPDetail";
    
            private static IMongoDatabase db = MongoDb.GetMongoDb();
    
            public static List<IPInfo> GetAllList()
            {
                try
                {
                    var collection = db.GetCollection<IPInfo>(CollectionName);
                    List<IPInfo> list = collection.Find(new BsonDocument()).ToList();
                    return list;
                }
                catch (Exception ex)
                {
                    return null;
                }
            }
    
            /// <summary>
            /// 插入主表
            /// </summary>
            /// <returns></returns>
            public static bool Add(string ip, string ipAddress)
            {
                try
                {
                    var IPInfoCollection = db.GetCollection<IPInfo>(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;
                }
            }
    
            /// <summary>
            /// 插入主表、子表:
            /// 主表:有则不插入,无则插入;
            /// 子表:一条数据都没有,则插入,已经存在数据,判断是否存在一条相同数据,存在则不插入,不存在则插入。
            /// </summary>
            /// <param name="ip">ip</param>
            /// <param name="model">ip接口获取的信息</param>
            /// <param name="ipBrowser">浏览器</param>
            /// <returns></returns>
            public static bool AddIPInfoAndDetail(string ip, ApiIPInfo model, string ipBrowser = "")
            {
                try
                {
                    //ip地址
                    var ipAddress = model.Address;
                    //ip网络
                    var ipNetwork = model.Network;
    
                    var IPInfoCollection = db.GetCollection<IPInfo>(CollectionName);
                    var IPDetailCollection = db.GetCollection<IPDetails>(ChildCollectionName);
    
                    //判断主表是否已经存在
                    var pFilter = Builders<IPInfo>.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<IPDetails>.Filter.Eq("parentId", parent_id);
                        var childItem = IPDetailCollection.Find(childFilter1).FirstOrDefault();
                        if (childItem == null)
                        {
                            AddChild(parent_id, ipAddress, ipNetwork, ipBrowser);
                        }
                        else
                        {
                            //如果没有类似的数据,则插入
                            var filterBuilder = Builders<IPDetails>.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;
                }
            }
    
            /// <summary>
            /// 插入子表
            /// </summary>
            /// <returns></returns>
            public static bool AddChild(string parentId, string ipAddress, string ipNetwork, string ipBrowser)
            {
                try
                {
                    var IPDetailCollection = db.GetCollection<IPDetails>(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;
                }
            }
    
            /// <summary>
            /// 插入子表
            /// </summary>
            /// <returns></returns>
            public static bool AddChild(IPDetails model)
            {
                try
                {
                    var IPDetailCollection = db.GetCollection<IPDetails>(ChildCollectionName);
                    IPDetails ipDetails = new IPDetails();
                    ipDetails.parentId = model.parentId;
                    ipDetails.addTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:fff");
                    ipDetails.ipAddress = model.ipAddress;
                    ipDetails.ipNetwork = model.ipNetwork;
                    ipDetails.ipBrowser = model.ipBrowser;
                    IPDetailCollection.InsertOne(ipDetails);
    
                    return true;
                }
                catch (Exception ex)
                {
                    return false;
                }
    
            }
        }

      

  • 相关阅读:
    vipw和vigr命令
    linux sudo命令
    linux中切换用户方式su和su -的区别
    ls Common Command-Line Options
    字符串同构问题 字符串操作:数组计数字符个数问题
    聚类算法
    Python实践之(七)逻辑回归(Logistic Regression)
    Gradient Boost Decision Tree(&Treelink)
    天池大数据周冠军分享|附移动推荐算法赛答辩会Top5选手PPT
    【天池大数据赛题解析】资金流入流出预测(附Top4答辩ppt)
  • 原文地址:https://www.cnblogs.com/qk2014/p/9289164.html
Copyright © 2011-2022 走看看