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;
} }
}

C# Asp.net中简单操作MongoDB数据库(二)的更多相关文章

  1. C# Asp.net中简单操作MongoDB数据库(一)

    需要引用MongoDB.Driver.dll.MongoDB.Driver.core.dll.MongoDB.Bson.dll三个dll. 1.数据库连接: public class MongoDb ...

  2. Python学习笔记_03:简单操作MongoDB数据库

    目录 1. 插入文档 2. 查询文档 3. 更新文档 4. 删除文档   1. 插入文档 # -*- coding: UTF-8 -*- import datetime from pymongo im ...

  3. C#中简单操作Mysql数据库

    以C#访问MySQL数据库,执行简单的CRUD. MySql.Data.dll是C#操作MySQL的驱动文件,是C#连接MySQL必要插件,使C#语言更简洁的操作MySQL数据库.可以用NuGet命令 ...

  4. C#中简单操作SQLserver数据库(ADO.NET的简单应用)

    本篇文章以 ADO.NET 访问SQL SERVER 数据库为例, 其中需用System.Data.SqlClient; 数据库连接字符串写法为:server=数据源(服务器名称);uid=用户名;p ...

  5. nodeJS中使用mongoose模块操作mongodb数据库

    在实际运用中,对于数据库的操作我们不可能一直在cmd命令行中进行操作,一般情况下需要在node环境中来操作mongodb数据库,这时就需要引入mongoose模块来对数据库进行增删改查等操作. 首先, ...

  6. python操作三大主流数据库(7)python操作mongodb数据库①mongodb的安装和简单使用

    python操作mongodb数据库①mongodb的安装和简单使用 参考文档:中文版:http://www.mongoing.com/docs/crud.html英文版:https://docs.m ...

  7. JAVA操作MongoDB数据库

    1. 首先,下载MongoDB对Java支持的驱动包 驱动包下载地址:https://github.com/mongodb/mongo-java-driver/downloads 2.Java操作Mo ...

  8. PHP操作MongoDB 数据库

    最近有个项目,需要用php操作mongoDb数据,整理如下 1,连接MongoDB数据库 $conn = new Mongo(); 其他链接方式 //$conn=new Mongo(); #连接本地主 ...

  9. mongoose之操作mongoDB数据库

    mongoose是node.js操作mongoDB数据库的一种工具,借助于mongoose,我们可以便捷的完成一些数据库的基本操作,基本使用如下: 1.安装 npm install mongoose ...

随机推荐

  1. django中sqlite迁移mysql

    sqlite数据迁移 1 数据备份 django中打开terminalpython manage.py dumpdata authorization > authorization_data.j ...

  2. 关于读取excel 和 写excel

        def sync_db(data_list): '''Synchron potential student from excel to PrepareToCrm ''' push_list = ...

  3. (转发)Navicat 远程连接 Linux服务器上的MySQL数据库

    授权法: 在安装mysql的机器上运行: 1.# ./bin/mysql -uroot -p //这样应该可以进入MySQL服务器 2.mysql> GRANT ALL PRIVILEGES O ...

  4. Python内置模块之subprocess

    import subprocess ret = subprocess.Popen('netstat -ano',shell=True,stdout=subprocess.PIPE,stderr=sub ...

  5. 在Pycharm中自动添加时间日期作者等信息

    1.按照下面路径以此打开File→→Settings→→Editor→→File and code Templates 右侧找到Python Script,如下图 2.设置相关代码如下 ##!/usr ...

  6. mysql group by 过滤字段 只能在SELECT 后面出现,不能写其他字段 报错解决 关键字 sql_mode=only_full_group_by

    1:报错  关键字 sql_mode=only_full_group_bymysql> select uuid,ip,count(*) from dbname_report.t_client_i ...

  7. 咸鱼入门到放弃7--jsp<二>jsp常用标签

    一.JSP标签介绍 JSP标签也称之为Jsp Action(JSP动作)元素,它用于在Jsp页面中提供业务逻辑功能,避免在JSP页面中直接编写java代码,造成jsp页面难以维护. 二.JSP常用标签 ...

  8. 2018-2019-1 20189201《Linux内核原理与分析》第四周作业

    1. 阴天☁️ 你说你爱烟雨微茫,雨来时你却伞遮霓裳: 你说你爱春光灿烂,阳光普照时你却孑然惆怅: 你说你爱微风轻柔,风拂发梢时你却紧闭门窗: 这便是为何你说你也深深爱我,我却眼波成霜. 2. 今日发 ...

  9. 网络编程-Mysql-1、数据库的启动关闭,创建数据库,表等基本操作

    启动服务端:sudo service mysql start 关闭服务端:suodo service mysql stop 重启服务端:suodo service mysql restart 连接数据 ...

  10. CLR Via 第一 章 知识点整理(2)程序集和CLR的启动

    这一节先简单的讨论一下程序集以及CLR的初始化 虽然对应的编译器会生成托管模块,但实际上CLR不与托管模块工作,编译器除了编译还有将生成的托管模块转换为程序集的功能,微软还提供了工具AL.exe(程序 ...