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数据库的更多相关文章

  1. 使用spring boot访问mongodb数据库

    一. spring boot中传参的方法 1.自动化配置 spring Boot 对于开发人员最大的好处在于可以对 Spring 应用进行自动配置.Spring Boot 会根据应用中声明的第三方依赖 ...

  2. 使用Robo 3T访问MongoDB数据库

    使用Robo 3T操作MongoDB数据库教程:https://blog.csdn.net/baidu_39298625/article/details/99654596 在IDEA中用三个jar包链 ...

  3. Python访问MongoDB数据库

    #encoding: utf-8 __author__ = 'Administrator' #import pymongo from pymongo import MongoClient,GEO2D ...

  4. 使用Spring访问Mongodb的方法大全——Spring Data MongoDB查询指南

    1.概述 Spring Data MongoDB 是Spring框架访问mongodb的神器,借助它可以非常方便的读写mongo库.本文介绍使用Spring Data MongoDB来访问mongod ...

  5. 孤荷凌寒自学python第五十七天初次尝试使用python来连接远端MongoDb数据库

    孤荷凌寒自学python第五十七天初次尝试使用python来连接远端MongoDb数据库 (完整学习过程屏幕记录视频地址在文末) 今天是学习mongoDB数据库的第三天.感觉这个东西学习起来还是那么困 ...

  6. 使用Spring访问Mongodb的方法大全——Spring Data MongoDB

    1.概述 Spring Data MongoDB 是Spring框架访问mongodb的神器,借助它可以非常方便的读写mongo库.本文介绍使用Spring Data MongoDB来访问mongod ...

  7. 使用Robo 3T操作MongoDB数据库

    安装Robo 3T连接MongoDB数据库教程:https://blog.csdn.net/baidu_39298625/article/details/98845789 在IDEA中用三个jar包链 ...

  8. mongodb数据库禁止外网访问以及添加账号

    未曾料到被黑客勒索比特币的戏码竟然降临到我的身上,几个月的技术积累付之一炬.怪只怪自己学艺不精,心存侥幸和无知,不过经此一役,方知网络安全防护的重要性. 一直未给自己的mongodb数据库设置账号密码 ...

  9. 怎样从外网访问内网MongoDB数据库?

    本地安装了一个MongoDB数据库,只能在局域网内访问到,怎样从外网也能访问到本地的MongoDB数据库呢?本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动MongoDB数据库 默认安装 ...

随机推荐

  1. 洛谷——P3379 【模板】最近公共祖先(LCA)

    P3379 [模板]最近公共祖先(LCA) 题目描述 如题,给定一棵有根多叉树,请求出指定两个点直接最近的公共祖先. 输入输出格式 输入格式: 第一行包含三个正整数N.M.S,分别表示树的结点个数.询 ...

  2. Servlet发送邮件

    以下内容引用自http://wiki.jikexueyuan.com/project/servlet/sending-email.html: 使用Servlet发送一封电子邮件是非常简单的,但是开始之 ...

  3. Django学习系列之captcha 验证码插件

    安装部署 安装captcha pip3. install django-simple-captcha== settings.py中引入captcha INSTALLED_APPS = [ 'djang ...

  4. ArcGIS 教程:Workflow Manager 高速浏览

    应用程序概述 Workflow Manager 用户界面提供了用于在整个作业的生命周期中创建和管理作业的工具. 下面全部信息将会在本帮助文档的兴许章节中进行具体的说明. 文件菜单 新建 - 在系统中创 ...

  5. 具体解释Android定位

    相信非常多的朋友都有在APP中实现定位的需求,今天我就再次超炒冷饭,为大家献上国内开发人员经常使用到的三种定位方式.它们分别为GPS,百度和高德,惯例先简介下定位的背景知识. 什么是GPS定位.基站定 ...

  6. 爸爸和儿子的故事带你理解java线程

    今天回想线程方面的知识,发现一个非常有意思的小程序.是用来说明多线程的以下贴出来分享下,对刚開始学习的人理解线程有非常大的帮助 爸爸和儿子的故事 <span style="font-f ...

  7. 加入收藏BUG改善

    <script type="text/javascript"> function add_favorite(a, title, url) { url = url || ...

  8. Android 4.4.2 动态加入JNI库方法记录 (一 JNI库层)

    欢迎转载,务必注明出处.http://blog.csdn.net/wang_shuai_ww/article/details/44456755 本篇是继<s5p4418 Android 4.4. ...

  9. JavaScript总结01

    1 JavaScript 与 Java 的关系? 雷锋和雷峰塔的关系JavaScript和Java都与sun公司有合作,是借势Java 2 JavaScript 的特点是什么? 脚本语言(一种轻量级的 ...

  10. 容器ArrayList原理(学习)

    一.概述 动态数组,容量能动态增长,元素可以为null,用数组存储,非线程同步(vector线程同步) 每个 ArrayList 实例都有一个容量,该容量是指用来存储列表元素的数组的大小,自动增长(默 ...