C# 访问mongodb数据库
1.引用四个mongodb动态库MongoDB.Bson.dll,MongoDB.Driver.Core.dll,MongoDB.Driver.dll,MongoDB.Driver.Legacy.dll
/// <summary>
/// 从mongodb数据库获取谷歌影像
/// </summary>
public class MongoDBReaderHelper
{
/// <summary>
/// 链接字符串
/// </summary>
private string conn = "mongodb://127.0.0.1:27017";
/// <summary>
/// 指定的数据库
/// </summary>
private string dbName = "Level1-Level14";
/// <summary>
/// Mongo客户端
/// </summary>
private MongoClient client;
/// <summary>
/// 当前操作数据库
/// </summary>
protected IMongoDatabase database;
/// <summary>
/// 当前操作的数据库表
/// </summary>
protected IMongoCollection<Tiled> collection; private Dictionary<string, IMongoCollection<Tiled>> CollectionList = new Dictionary<string, IMongoCollection<Tiled>>();
public bool InitMongoDB(string connectionString)
{
this.conn = connectionString;
client = new MongoClient(conn);
if (client == null)
{
//cons .Show("服务器连接失败");
Console.WriteLine("mongodb数据库连接失败");
return false;
} database = client.GetDatabase(dbName);
collection = database.GetCollection<Tiled>("Titles");//数据库表
this.CollectionList.Add(dbName, collection);
Console.WriteLine("mongodb数据库连接成功"); return true;
} /// <summary>
/// 获取瓦片
/// </summary>
/// <param name="key">Key值:4-6-11</param>
/// <param name="collection"></param>
/// <returns>把图片输出到本地</returns>
protected async Task<byte[]> _GetTiled(string key, IMongoCollection<Tiled> collection)
{
if (collection == null) return null;
var filter = Builders<Tiled>.Filter.Eq("_id", key);
Task<Tiled> document = collection.Find<Tiled>(filter).FirstOrDefaultAsync();
Tiled tiled = await document;
//if (tiled != null)
//{
// string filename = tiled.Key + ".jpg";
// byte[] img = tiled.ByteImg;
// using (FileStream fs = new FileStream(filename, FileMode.CreateNew))
// {
// fs.Write(img, 0, img.Length);
// fs.Close();
// }
//} return tiled.ByteImg;
} /// <summary>
/// 获取瓦片
/// </summary>
/// <param name="key">Key值:4-6-11</param>
/// <param name="collection"></param>
/// <returns>把图片输出到本地</returns>
public async Task<byte[]> GetTiled(string key)
{
string[] tmplist = key.Split('-');
if(tmplist.Length!=)
{
Console.WriteLine("Tile关键字不符合要求" + key);
return null;
}
int level = ;
int x = ;
int y = ;
if(!int.TryParse(tmplist[],out level))
{
Console.WriteLine("Tile级别不符合要求" + key);
return null;
}
if (!int.TryParse(tmplist[], out x))
{
Console.WriteLine("X不符合要求" + key);
return null;
}
if (!int.TryParse(tmplist[], out y))
{
Console.WriteLine("Y不符合要求" + key);
return null;
} return await _GetTiled(key, GetCollection(level,x,y));
}
private IMongoCollection<Tiled> GetCollection(int level,int x,int y)
{
string dbname = LevelToDBName(level);
if(dbname=="")
{
return null;
}
string tablename = LXYToTableName(level, x, y); string key = string.Format("{0}_{1}", dbname, tablename); Console.WriteLine(string.Format("{0},{1},{2}-->{3}",level,x,y,key));
if (!this.CollectionList.ContainsKey(key))
{
database = client.GetDatabase(key);
if(database==null)
{
return null;
}
collection = database.GetCollection<Tiled>(tablename);//数据库表
this.CollectionList.Add(key, collection);
}
return this.CollectionList[key];
} private string LXYToTableName(int level, int x, int y)
{
string ret = "Titles"; if(level>=)
{
int xindex = x /(int) (Math.Pow(, ));
int yindex = y / (int)(Math.Pow(, )); int n = xindex * (int)Math.Pow(, level - ) + yindex+; ret = string.Format("Titles{0:D2}", n); }
return ret;
}
private string LevelToDBName(int level)
{
if(level>=&&level<=)
{
return "Level1-Level14";
}
else if(level>)
{
return string.Format("Level{0}", level);
}
return "";
}
} /// <summary>
/// 对应数据库中的数据表
/// </summary>
public class Tiled
{
//public UInt64 Id { get; set; }
/// <summary>
/// 图片流
/// </summary>
public byte[] ByteImg { get; set; }
[BsonId]
public string Key { get; set; }
}
}
C# 访问mongodb数据库的更多相关文章
- 使用spring boot访问mongodb数据库
一. spring boot中传参的方法 1.自动化配置 spring Boot 对于开发人员最大的好处在于可以对 Spring 应用进行自动配置.Spring Boot 会根据应用中声明的第三方依赖 ...
- 使用Robo 3T访问MongoDB数据库
使用Robo 3T操作MongoDB数据库教程:https://blog.csdn.net/baidu_39298625/article/details/99654596 在IDEA中用三个jar包链 ...
- Python访问MongoDB数据库
#encoding: utf-8 __author__ = 'Administrator' #import pymongo from pymongo import MongoClient,GEO2D ...
- 使用Spring访问Mongodb的方法大全——Spring Data MongoDB查询指南
1.概述 Spring Data MongoDB 是Spring框架访问mongodb的神器,借助它可以非常方便的读写mongo库.本文介绍使用Spring Data MongoDB来访问mongod ...
- 孤荷凌寒自学python第五十七天初次尝试使用python来连接远端MongoDb数据库
孤荷凌寒自学python第五十七天初次尝试使用python来连接远端MongoDb数据库 (完整学习过程屏幕记录视频地址在文末) 今天是学习mongoDB数据库的第三天.感觉这个东西学习起来还是那么困 ...
- 使用Spring访问Mongodb的方法大全——Spring Data MongoDB
1.概述 Spring Data MongoDB 是Spring框架访问mongodb的神器,借助它可以非常方便的读写mongo库.本文介绍使用Spring Data MongoDB来访问mongod ...
- 使用Robo 3T操作MongoDB数据库
安装Robo 3T连接MongoDB数据库教程:https://blog.csdn.net/baidu_39298625/article/details/98845789 在IDEA中用三个jar包链 ...
- mongodb数据库禁止外网访问以及添加账号
未曾料到被黑客勒索比特币的戏码竟然降临到我的身上,几个月的技术积累付之一炬.怪只怪自己学艺不精,心存侥幸和无知,不过经此一役,方知网络安全防护的重要性. 一直未给自己的mongodb数据库设置账号密码 ...
- 怎样从外网访问内网MongoDB数据库?
本地安装了一个MongoDB数据库,只能在局域网内访问到,怎样从外网也能访问到本地的MongoDB数据库呢?本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动MongoDB数据库 默认安装 ...
随机推荐
- spring 数据源JNDI 基于tomcat mysql配置
关键代码 <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean&q ...
- 当遇到Mac的Excel或者Word老是重复崩溃的时候
打开Number,新建文件然后导出为Excel.之后再用Excel打开,一切都OK了.
- Jenkins + SVN搭建php持续集成
目标需求 开发提交代码到SVN,jenkins在分发服务器上执行'svn update',分发服务器在把代码同步到webserver,实现持续集成 流程 配置jenkins 一.jenkins所需插件 ...
- javascript里的prototype
在javascript中,prototype是函数的一个固有属性,其他对象,比如字符串什么的,并没有这个属性. 这个属性做什么用呢? 1.用于该函数的所有实例进行共享 比如,共同的属性,共同的方法.类 ...
- Java生成带logo 的二维码
这个工具类主要实现了两点功能: 1. 生成任意文链接的二维码. 2. 在二维码的中间加入图像. 主要实现步骤: 第一步: 导入QR二维码3.0 版本的core包和一张jpg图片(logo). core ...
- Bridge Page
http://www.zzbaike.com/wiki/%E6%A1%A5%E9%A1%B5 桥页(Bridge Page),又叫“门页”(Doorway/Portal/Jump/Entry Page ...
- 一起talk C栗子吧(第九十回:C语言实例--使用管道进行进程间通信三)
各位看官们,大家好,上一回中咱们说的是使用管道进行进程间通信的样例.这一回咱们说的样例是:使用管道进行进程间通信.只是使用管道的方式不同样.闲话休提,言归正转.让我们一起talk C栗子吧! 我们在前 ...
- HttpClient-03Http状态管理
最初,Http被设计成一个无状态的,面向请求/响应的协议,所以它不能在逻辑相关的http请求/响应中保持状态会话.由于越来越多的系统使用http协议,其中包括http从来没有想支持的系统,比如电子商务 ...
- HDU 5073 数学题
题目传送门 http://acm.hdu.edu.cn/showproblem.php?pid=5073 这道题RE了好多发啊囧,RE到精神不振. Galaxy的质心并不是一成不变的,随着一些星球的移 ...
- 获取view宽高
在oncreate()中利用view.getWidth()或是view.getHeiht()来获取view的宽和高,看似没有问题,其实他们去得值是0,并不是你想要的结果? 这是为什么呢? 在调用onc ...