需要引用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数据库数据:
代码下载:https://download.csdn.net/download/coderk2014/10533230