[教程]MongoDB 从入门到进阶 (概要 以及 高级索引篇 TimeToLive
MongoDB概要 [关于MongoDB] 官方网站: MongoDB属于比较典型的NoSql数据库。和Relationship数据库相比,其数据属于文档结构。 最新版本的MongoDB为2.2.2 不支持WindowsXP [C#官方驱动程序] GitHub:https://github.com/mongodb/mongo-csharp-driver [管理工
MongoDB概要
[关于MongoDB]
官方网站:
MongoDB属于比较典型的NoSql数据库。和Relationship数据库相比,其数据属于文档结构。
最新版本的MongoDB为2.2.2 不支持WindowsXP
[C#官方驱动程序]
GitHub:https://github.com/mongodb/mongo-csharp-driver
[管理工具]
这里选用本人自制的可视化管理工具作为教程的演示工具。
大声呼吁:有兴趣的同志,加入这个工具的开发
下载地址:
GitHub: https://github.com/magicdict/MagicMongoDBTool
[建立第一个空数据库]
关于MongoDB的安装,香港服务器,已经有很多文章介绍了。
这里推荐CNBLOGS网友 百灵 的Mongodb之(初识如故)
安装这篇文章,应该可以正确安装MongoDB,其实就是下载和解压,完全绿色软件。
这个系列的教程,我将MongoDB解压到:C:\runmongo,可执行文件则都在C:\runmongo\bin下面。
新建一个MongoDB实例的方法很多,这里我新建了一个BAT文件,在BAT文件里面写了3句命令:
第一句:将执行目录切换到Mongo可执行目录
第二句:新建一个目录,MongoDB实例需要一个存放文件的目录,这里我选择新建一个C:\mongodb\magicdict 目录
第三句,则是新建一个MongoDB实例,同时,将MongoDB实例的侦听端口设置为 28030
关于MongoDB的启动参数,推荐 咫尺天涯的文章:mongodb启动参数
1 cd C:\runmongo\bin 2 mkdir C:\mongodb\magicdict 3 mongod --port 28030 --dbpath C:\mongodb\magicdict --rest
如果成功的话,将会有一个黑色的DOS控制台出现。当然,这个控制台只是日志输出,无法操作。你也可以将日志存放到一个文件里面。
这个时候去查看 C:\mongodb\magicdict,系统自动添加了一个 mongod.lock 锁文件。
接下来,启动可视化工具,看看数据库吧。
第一次启动时候,选择语言:
由于某些功能需要使用mongo的可执行文件,在可执行文件里面选择可执行文件路径
下面是连接管理界面,里面列出了所有现存的连接
单击添加按钮
由于是最简单的数据库,我们只需要填写 连接名称,主机,端口号即可。
连接名称:这个可以使任意字符,是便于用户记忆的。
主机:这里填写服务器的IP地址,这里使用 localhost 表示本机
端口:28030
这里你可以先使用 [测试] 按钮,检验一下设置是否正确。如果没有问题,则可以[添加]连接。
选中刚才建立的连接,按下[确定]按钮。则进入主界面。
界面左边的是当前连接(MongoDB实例)中所包含的数据库对象。当然,这个连接里面只是单纯的数据库。除了有一个系统自动生成的local数据库以外,什么都没有。
界面右边的是当前连接的状态信息。 关于这些状态信息,你可以参看官方的帮助文档:
一般来说,我们不会在local系统目录里面添加数据,一般都会新建一个数据库来保存用户数据。
当然,你可以 选中Connection节点,然后用主菜单或者右键菜单来 [新建数据库]。不过,这里将演示如何使用C#来创建数据库,添加数据。
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 using MongoDB.Driver;
6 using MongoDB.Bson;
7 using MongoDB.Driver.GridFS;
8 using MongoDB.Bson.Serialization.Attributes;
MagicMongoDBTool.Module
11 {
InitTestData
13 {
User
15
{
16
[BsonId]
17
public String ID;
)]
19
public String Name;
20
public Byte Age;
21
public Byte Age2;
22
public Byte Age3;
23
public Address address;
24
}
Address
26
{
27
public String street;
28
public String City;
29
public String state;
Zip;
31
32
}
GeoObject
34
{
35
[BsonId]
36
public String ID;
[] Geo;
38
}
TLLObject
40
{
41
[BsonId]
42
public String ID;
43
public DateTime CreateDateTime;
Game;
45
}
FillDataForGeoObject(MongoServer mongosvr)
47
{
);
);
50
mongoCol.RemoveAll();
51
Random Ro = new Random();
(int i = 0; i 1000; i++)
54
{
55
mongoCol.Insert(new GeoObject()
56
{
57
ID = i.ToString(),
58
Geo = new int[2] { Ro.Next() % 180, Ro.Next() % 180 }
});
61
}
62
}
FillDataForTTL(MongoServer mongosvr)
64
{
);
);
67
mongoCol.RemoveAll();
68
Random Ro = new Random();
(int i = 0; i 1000; i++)
71
{
72
mongoCol.Insert(new TLLObject()
73
{
74
ID = i.ToString(),
75
CreateDateTime = System.DateTime.Now.AddSeconds(i),
76
Game = Ro.Next()
77
});
78
}
79
}
FillDataForUser(MongoServer mongosvr)
81
{
);
);
85
mongoJsCol.Insert
这里我新建了一个mongodb的数据库,同时新增了3个演示用数据集(collection)。
具体的操作方法,推荐 码农的文章: MongoDB的C#驱动程序教程(译)
这里有非常详细的C#操作数据库的解释。全部是官方文档的翻译,可能是机器翻译的,但是对于英语不好的同志来说,有一定帮助。
当然,如果你的英语还可以,原汁原味的在这里:+Driver+Tutorial
MongoDB的对象存取,代码看上去有点ORM的味道,不过,由于MongoDB已经是阶层数据库了,完全不需要将Object进行映射(Map),而是直接存取到数据库中。
在简单类的时候,由于数据结构只是二维表格,这种优势不是很明显。在复杂类的时候,出现层次结构的时候,则效果非常明显。
下图则通过[树形视图]来直观展示了复杂阶层的类。
关系型数据库,需要将User数据和Address数据放在两张表中,然后用主键连接成视图。
阶层型数据库,香港服务器,则已经将User和Address信息放在一个文档(Document,类似于记录的概念)里面。
(当然,关系型的好处也非常明显,可以减少数据冗余,灵活性也非常好。阶层型数据库在编码上,可能更加贴近OOP)
[索引-TTL索引]
索引都是为了检索的性能而生的,MongoDB的索引也不例外。
TTL(TimeToLive)索引(MongoDB2.2.2新增)和地理位置索引(“2d”)则是MongoDB的特色。
TTL索引,索引对象是一个日期型字段,然后需要设定一个有效时间。通过监视 日期型字段的值和当前系统时间,参考有效时间,判断是否数据过期,对于过期的数据则自动删除。
这个特性对于自动删除日志这样的操作来说,将非常有用。例如我们可以对于 日志创建时间 进行索引,同时设定过期时间为 3600秒,这样系统将自动删除一个小时之前的日志。
这里我们准备了TTL这样的一个数据集:
数据集里面包含了一个CreateDateTime的日期型字段,里面存放着建立记录的时间。
接着我们选中数据集,通过索引管理器建立索引。
我们将对于CreateDateTime建立所以,同时设定有效时间为180秒。
这样的话,如果CreateDateTime和系统时间相差180秒,则记录将会被自动删除。
1.TTL索引必须建立在日期型字段(或者日期型字段数组)
2.不能建立在复杂索引上
3.你不能在 _id或者任何一个已经存在索引的字段上建立TTL索引
TTL索引的官方说明:
注意上面这张图的左边,显示了数据集的索引信息:
AutoDelete的索引过期时间为180秒。而默认的索引_id,则没有设定过期时间。
同时,里面的数据已经全部被系统自动删除掉了。
[索引-GEO索引]
如果,你的数据集里面有一个地理位置字段(所谓的地理位置字段,是一个数组,数组里面有两个数字,数字的范围是 [-180,180])。
例如,下面的Geo字段,就是一个地理位置字段。
我们可以对于地理位置字段,进行“2d”索引,美国空间,或者说是Geo索引。
观察一下索引类型:这里显示的是 “2d”,表示这是一个Geo地理索引
建立过地理索引的数据集,可以进行GeoNear查询。
官方文档:
GeoNear的意思就是:查询一下,指定的坐标附近,有那些记录。
你可以指定: 1.需要查询多少个最邻近的记录。
2.你可以限制最大的距离。
3.由于地理坐标的单位是弧度【-180,180】,有时候你需要将距离放大一些,你可以指定距离乘积
4.Spherical(球形)
下面我们要查询离坐标 【100,100】,距离在10以内的记录,我们限制最多查询100个记录。
并且我们不需要系统对于距离进行放大或者缩小的处理。
查询结果:我们扫描了23个记录(由于有索引,所以不需要扫描全部记录),扫描时间为0
符合条件的记录有6个,平均距离为 6.34 最大距离为 9.21
每条记录的详细信息都可以在结果里面看到。

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

Kimi:一句话,十几秒钟,一份PPT就新鲜出炉了。PPT这玩意儿,可太招人烦了!开个碰头会,要有PPT;写个周报,要做PPT;拉个投资,要展示PPT;就连控诉出轨,都得发个PPT。大学更像是学了个PPT专业,上课看PPT,下课做PPT。或许,37年前丹尼斯・奥斯汀发明PPT时也没想到,有一天PPT竟如此泛滥成灾。吗喽们做PPT的苦逼经历,说起来都是泪。「一份二十多页的PPT花了三个月,改了几十遍,看到PPT都想吐」;「最巅峰的时候,一天做了五个PPT,连呼吸都是PPT」;「临时开个会,都要做个

夏天雨后,经常能见到一种美丽且神奇的特殊天气景象——彩虹。这也是摄影中可遇而不可求的难得景象,非常出片。彩虹出现有这样几个条件:一是空气中有充足的水滴,二是太阳以较低的角度进行照射。所以下午雨过天晴后的一段时间内,是最容易看到彩虹的时候。不过彩虹的形成受天气、光线等条件的影响较大,因此一般只会持续一小段时间,而最佳观赏、拍摄时间更为短暂。那么遇到彩虹,怎样才能合理将其记录下来并拍出质感呢?1.寻找彩虹除了上面提到的条件外,彩虹通常出现在阳光照射的方向,即如果太阳由西向东照射,彩虹更有可能出现在东

我们知道LLM是在大规模计算机集群上使用海量数据训练得到的,本站曾介绍过不少用于辅助和改进LLM训练流程的方法和技术。而今天,我们要分享的是一篇深入技术底层的文章,介绍如何将一堆连操作系统也没有的「裸机」变成用于训练LLM的计算机集群。这篇文章来自于AI初创公司Imbue,该公司致力于通过理解机器的思维方式来实现通用智能。当然,将一堆连操作系统也没有的「裸机」变成用于训练LLM的计算机集群并不是一个轻松的过程,充满了探索和试错,但Imbue最终成功训练了一个700亿参数的LLM,并在此过程中积累

机器之能报道编辑:杨文以大模型、AIGC为代表的人工智能浪潮已经在悄然改变着我们生活及工作方式,但绝大部分人依然不知道该如何使用。因此,我们推出了「AI在用」专栏,通过直观、有趣且简洁的人工智能使用案例,来具体介绍AI使用方法,并激发大家思考。我们也欢迎读者投稿亲自实践的创新型用例。视频链接:https://mp.weixin.qq.com/s/2hX_i7li3RqdE4u016yGhQ最近,独居女孩的生活Vlog在小红书上走红。一个插画风格的动画,再配上几句治愈系文案,短短几天就能轻松狂揽上

当Sora「千呼万唤」不出来时,OpenAI的对手们却纷纷祭出大杀器来炸街。Sora再不开放使用,真的要被偷家了!今日,旧金山初创公司LumaAI打出一手王牌,推出新一代AI视频生成模型DreamMachine。人人免费可用。据介绍,该模型能够根据简单的文本描述生成高质量、逼真视频,效果堪比Sora。消息一出,大量用户挤进官网尝鲜。尽管官方声称该模型能在短短两分钟内生成120帧视频,但由于访问量激增,许多用户在官网中苦苦等待数小时。Luma的产品增长主管BarkleyDai不得不在Discord

7月24日,快手视频生成大模型可灵AI宣布基础模型再次升级,并全面开放内测。快手表示,为了让更多用户能使用可灵AI,更好满足创作者不同层次的使用需求,即日起,在全面开放内测的基础上,还将正式上线会员体系,针对不同类别的会员,提供相应的专属功能服务。同时,可灵AI的基础模型也再次迎来升级,进一步提升用户体验。基础模型效果再升级进一步提升用户体验发布一个多月以来,可灵AI已经多次升级迭代,随着本次会员体系的推出,可灵AI的基础模型效果再次迎来蜕变。首先是画面质量显着提升,通过升级后的基础模型生成的视

矩阵很难理解,但换个视角或许会不一样。在学习数学时,我们常因所学知识的难度和抽象而受挫;但有些时候,只需换个角度,我们就能为问题的解答找到一个简单又直观的解法。举个例子,小时候在学习和的平方(a+b)²公式时,我们可能并不理解为什么它等于a²+2ab+b²,只知道书上这么写,老师让这么记;直到某天我们看见了这张动图:登时恍然大悟,原来我们可以从几何角度来理解它!现在,这种恍然大悟之感又出现了:非负矩阵可以等价地转换成对应的有向图!如下图所示,左侧的3×3矩阵其实可

在日常拍摄时,很多人遇到这种情况:相机上的照片看起来曝光正常,而将照片导出后发现其真实形态与相机的呈现效果相去甚远,曝光明显存在问题。受环境光线、屏幕亮度等因素的影响,这种情况是比较正常的,不过由此也给我们带来了一个启示:看照片、分析照片,一定要学会看直方图。那么,什么是直方图?简单地理解,直方图就是照片像素亮度分布的一种展示形态:横向来看,直方图大致可分为3个部分,左侧是阴影区域,中间为中间调部分,右侧为高光区域;最左侧是阴影中的死黑区域,而最右侧是高光中的溢出区域。纵向代表的是像素的具体分布
