MongoDB是一个NoSQL数据库。在NoSQL的保护伞下,我们把所有那些不使用SQL语言来查询数据的数据库放在一起。
MongoDB的主要特点
MongoDB是一个对JavaScript非常友好的数据库。它暴露了一个JavaScript API,我们可以用来创建数据库和对象的集合(称为文档)。
它是无模式的,这意味着你不需要在存储数据之前为其预先定义一个结构。
在MongoDB中,你可以存储任何对象,而不必担心构成这个对象的特定字段以及如何存储它们。你告诉MongoDB来存储这个对象。
数据以类似于JSON的格式存储,但为了允许存储更多的基本数据类型而进行了增强。
安装
让我们继续安装MongoDB。你可以使用许多提供MongoDB实例访问权的云服务提供商之一,但为了学习,我们将自己安装它。
我使用的是Mac,所以本教程中的安装说明是指该操作系统。
打开终端并运行。
brew tap mongodb/brew
brew install mongodb-community
就这样了。
说明并不长,也不复杂,假设你知道如何使用终端和如何安装Homebrew。
安装时告诉我们这些。
To have launchd start mongodb now and restart at login:
brew services start mongodb-community
Or, if you don't want/need a background service you can just run:
mongod --config /usr/local/etc/mongod.conf
你可以选择启动一次MongoDB,让它作为你电脑中的后台服务永远运行(我更喜欢的事情),或者你可以在需要的时候才运行它,通过运行后一个命令。
MongoDB的默认配置是这样的。
systemLog:
destination: file
path: /usr/local/var/log/mongodb/mongo.log
logAppend: true
storage:
dbPath: /usr/local/var/mongodb
net:
bindIp: 127.0.0.1
日志被存储在/usr/local/var/log/mongodb/mongo.log ,数据库被存储在/usr/local/var/mongodb 。
默认情况下,没有访问控制,任何人都可以读写数据库。
Mongo Shell
实验MongoDB并开始与之交互的最好方法是运行mongo 程序,它可以启动MongoDB shell。

现在你可以输入任何Mongo能理解的命令。
创建一个数据库
当你启动时,Mongo会创建一个名为test 的数据库。在shell中运行db ,告诉你活动数据库的名称

要改变数据库,只要写上use newname ,newname 数据库就会立即被创建,shell会切换到使用该数据库。

使用show databases 来列出可用的数据库。

正如你所看到的,something 数据库没有被列出,只是因为其中还没有集合。让我们来创建一个。
集合
在MongoDB中,一个集合相当于一个SQL数据库表。
你可以通过使用db.createCollection() 命令在当前数据库中创建一个集合。第一个参数是数据库名称,你可以传递一个选项对象作为第二个参数。

一旦你这样做,show databases 将列出新的数据库,而show collections 将列出集合。

你也可以通过把它作为db 对象的一个属性来创建一个新的集合,然后调用insert() ,把一个对象添加到这个集合中。
db.dogs.insert({ name: 'Roger' })

列出集合中的对象
要显示添加到集合中的对象,使用find() 方法。

正如你所看到的,对于我们添加的记录,有一个额外的_id 属性。这是由MongoDB为我们自动生成的。
现在,添加更多的狗。
db.dogs.insert({ name: 'Buck' })
db.dogs.insert({ name: 'Togo' })
db.dogs.insert({ name: 'Balto' })
调用db.dogs.find() ,我们会得到所有的条目,而我们可以通过一个参数来过滤和检索一个特定的条目,例如用db.dogs.find({name: 'Roger'}) 。

find() 方法返回一个你需要遍历的游标。
还有一个方法,当你知道你只得到一条记录时,这个方法很方便,就是findOne() ,它的使用方法是一样的。如果有多条记录符合查询条件,它将只返回第一条。

更新记录
要更新一条记录,你可以在一个集合上使用update() 方法。

删除记录
你可以在一个集合上调用remove() 方法删除一条记录,并传递一个对象来帮助识别它。

要删除一个集合中的所有条目,请传递一个空对象。