月度归档:2017年08月

Mongodb索引

参考

MongoDB权威指南(第2版)

Mongodb Docs

前言

建立索引对于任何需要提高查询速度的数据库来说都非常重要,那么索引究竟是一个什么?首先来看看下面是《区块链:技术驱动金融》这本书的前两章的目录。

第1章密码学及加密货币概述----------1
1.1密码学哈希函数----------4
1.2哈希指针及数据结构----------14
1.3数字签名----------19
1.4公钥即身份----------24
1.5两种简单的加密货币----------26
第2章比特币如何做到去中心化----------35
2.1中心化与去中心化----------37
2.2分布式共识----------39
2.3使用区块链达成没有身份的共识----------44
2.4奖励机制与工作量证明----------51
2.5总结----------59

通过目录,我们能很快很清楚的知道这本书写了什么,而我们也能很快从中查找到我们感兴趣的内容在哪一页,如果没有目录,我们将会一篇一篇的去翻阅我们想了解的内容,而索引可以比作数据库的目录。

继续阅读

Mongodb查询

参考

MongoDB权威指南(第2版)

Mongodb Documentation

前言

在Mongodb中查询的方法常用的有两个findfindOne,前者返回所有匹配的文档,而后者返回匹配的第一个文档,它的用法很简单。第一个是它的查询条件,第二个是指定返回文档中字段的过滤器,这个的作用也就是说你想显示哪些字段或者你想不显示哪些字段。并且该方法返回的是一个Cursor对象。

需要注意的是,find方法查询的时候会查询数组的成员是否符合查询条件,如果查询条件符合,将会把整个数组返回。

db.collection.find(query, projection)

比如下面通过find语句,查询blog集合中作者为xsscript的文档,并且只返回作者和文章内容。

db.blog.find({author: 'xsscript'}, {author: 1, content: 1});

在过滤器中,你如果没有显示的声明不返回_id键,默认都会返回,除非显示的声明_id: 0。还有比如在过滤器中设置了auther: 1,那么只会返回_idauther两个键值,如果你只需要过滤一些不希望显示的值,那么就在过滤器中设置你需要不显示的键并把值设为0,这样文档中所有的值除了你设置不返回的都会返回。

继续阅读

Mongodb更新修改器

参考

MongoDB权威指南(第2版)

前言

在Mongodb中我们使用的是update方法去更新我们需要更新的文档,比如下面的一个文档结构:

{
    a: 1,
    b: 2,
    c: 3
}

我们想通过update方法来更新里面的键值对a: 1a: 2,或者是只对文档里面的一个键的值进行更改,按照代码所示我们会像下面这样来写代码:

db.test.update({
    a: 1
},{
    a: 2
});

但是真的如我们所示吗?其实结果并不是我们想要的,上面的代码执行后,其实文档更新后的结果为:

{
    a: 2
}

上面的执行代码覆盖了我们整个文档,当然这不是我们想要的结果。如果想要达到我们理想的结果,我们需要使用Mongodb提供的更新修改器(Update Modifier)。

继续阅读

Mongodb Shell

前言

前一章文章中提到了Mongodb提供了一个Javascript运行环境,这个运行环境我们通过mongo或者mongo.exe打开,这是一个独立的Mongodb客户端,打开它后会自动连接上本地端口为27017的数据库。

如果你需要远程连接到其他数据库或者通过另外端口进行连接,可以通过--host xxxx来设置远程数据库的地址和通过--port来改变默认连接端口。

运行mongod

打开mongo后会默认连接到test数据库,就像下图:

默认test

在这个环境中我们可以使用Javascript的语法、原生方法、还可以编写函数来处理数据库,除此之外,这个Shell环境中还提供了Mongodb的一些操作语法,比如db,show dbs,show collections,insert等。下图显示了在Shell环境中运行Javascript代码以及一些常用的原生方法。

运行Js代码

需要注意Shell会检查Javascript代码是否完整,如果没有写完可以在下一行继续写,但是如果在写代码的过程中发现出现了问题需要取消,按三次回车键就可以取消当前语句执行。比如下图中我定义了一个变量c,但是没有赋值,我连续按三次回车键取消当前语句执行,当我再次使用变量c的时候提示c is not defined

取消代码执行

继续阅读

Mongodb基础知识

参考

MongoDB权威指南(第2版)

前言

Mongodb是一种面向文档的数据库,并非关系型数据库(如Mysql等),Mongodb的出现也让前端后端更加的统一,因为它的数据结构非常类似于Javascript中的对象。比如说下面,在Javascript中代表对象,在Mongodb中代表的就是一个文档。

{
    a: 1,
    b: 2
}

如果我们全栈都是使用的Javascript(Javascript+Nodejs+Mongodb)那么将更加提高我们的便利以及统一性。

如果你之前使用的是Mysql等关系型数据库,那么可能需要对Mongodb数据库的观念要有所改变,在Mongodb中没有行和列,取而代之的是文档。在Mongodb中也没有表的存在,取而代之的是集合。

每一个文档都有一个_id用于表示这个文档的唯一性,并且Mongodb提供了一个Javascript Shell,我们可以通过Javascript语法来管理操作等方式来控制数据库,这也为我们的全栈更大一步的增加了统一性。
继续阅读