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数据库 默认安装 ...
随机推荐
- I - Balancing Act POJ - 1655
Consider a tree T with N (1 <= N <= 20,000) nodes numbered 1...N. Deleting any node from the t ...
- Extjs6(六)——增删查改之查询
本文主要实现的效果是:点击查询按钮,根据form中的条件,在Grid中显示对应的数据(如果form为空,显示全部数据) 一.静态页面 1.查询按钮 { text:'查询', handler: 'onS ...
- Subsets and Subsets II (回溯,DFS,组合问题)
Given a set of distinct integers, S, return all possible subsets. Note: Elements in a subset must be ...
- Android 原生开发、H5、React-Native使用利弊和场景技术分享
http://m.blog.csdn.net/article/details?id=51778086 发表于2016/6/28 18:52:46 1176人阅读 最近工作中接触到React ...
- [52ABP系列] - 002、模板项目配合代码生成器开发
前言 本篇的主要内容是 52ABP SPA模板如何配合52ABP代码生成器开发项目 如果不了解 52ABP 项目请先看我的第一篇文章 [52ABP系列] - 001.SPA免费项目模版搭建教程 话不多 ...
- 如何使用TFTP客户端工具修复路由器固件
如何使用TFTP客户端工具修复路由器固件 编号:12083 来自:NetGear 更新日期:2013-10-14 访问数量:24650 NETGEAR无线路由器中, ...
- centos7容量扩充
新买的2T 绿盘到货了~~好开心的说~但毕竟是第一次安装,事先还是在网上搜索了很多资料才敢动手,下面就开始啦~ 环境:Centos7.dell服务器.2T容量绿盘 1.硬盘连接好之后,开机先使用fdi ...
- 【SSH进阶之路】Hibernate搭建开发环境+简单实例(二)
Hibernate是很典型的持久层框架,持久化的思想是很值得我们学习和研究的.这篇博文,我们主要以实例的形式学习Hibernate,不深究Hibernate的思想和原理,否则,一味追求,苦学思想和原理 ...
- BUILD FAILED D:\build.xml:2: 前言中不同意有内容。
1.错误描写叙述 Microsoft Windows [版本号 6.1.7601] 版权全部 (c) 2009 Microsoft Corporation. 保留全部权利. C:\Users\Admi ...
- 抢占式内核与非抢占式内核中的自旋锁(spinlock)的差别
一.概括 (1)自旋锁适用于SMP系统,UP系统用spinlock是作死. (2)保护模式下禁止内核抢占的方法:1.运行终端服务例程时2.运行软中断和tasklet时3.设置本地CPU计数器preem ...