MongoDB

MongoDB 和 nodejs

基于文档的非关系型数据库,文档是按BSON(JSON的轻量化二进制格式)存储的,增删该查等管理数据库命令和JS语法像。
MongoDB使用集合和文档描述存储数据。
collection就相当于表,document相当于行,不过MySQL之类的关系型数据库,表结构是固定的,比如某一行由若干列组成,行行都一样,而MongoDB不同,一个集合里的多个文档可以有不同的结构,更灵活一些。


MongoDB是一个 基于分布式文件存储的NoSQL(非关系型数据库)由C++编写,旨在为WEB应用提供可拓展的高性能数据存储方案。
MongoDB支持的数据结构非常松散,是类似json的 bjson格式,因此可以存储比较复杂的数据类型。

最大的特点: 强大的查询语言,语法类似面向对象的查询语言,几乎可以实现类似关系数据库单表查询绝大部分功能,还支持数据建立索引

文档

文档 是MongoDB的最基本单位: 每个文档用唯一的id标识,文档的属性以key/value的键值对形式,文档内可以嵌套另一个文档,因此可以存储比较复杂的数据类型。
唯一ID:每个document都有自己的unique id!

集合

集合是许多文档的总和,一个数据库可以有多个集合,一个集合可以有多个文档

eg:
这里写图片描述


不需要相同的record
MongoDB 存储 documents in collection
不像表tables , 一个 collection 不要求它的documents 拥有相同的模式即schema。 也就是说 document可以是不同的。
一个document是一个record啊
但是每个document都有自己的unique id!

安装

我是在Linux安装的,直接上官网下载或者搜索
mongodb-linux-x86_64-ubuntu1204-3.2.1.tgz
对应好自己的操作系统版本来下载即可。
解压到对应的目录即可。 不需要配置什么。
如果需要随时执行mongo,可以把bin目录写入/etc/profile

mongoDB 默认的启动的数据库路径是
/data/db

mkdir -p /data/db

启动mongodb

cd到mongodb目录下的bin文件夹启动mongodb
//下面这个是需要权限的登录方式, 用户连接需要用户名和密码

/usr/local/server/mongodb/bin/mongod --dbpath=/usr/local/server/mongodb/data --logpath=/usr/local/server/mongodb/logs --logappend  --auth  --port=27017 --fork

//这个是不需要密码的

/usr/local/server/mongodb/bin/mongod --dbpath=/usr/local/server/mongodb/data --logpath=/usr/local/server/mongodb/logs --logappend  --port=27017 --fork

参数解释这里写图片描述


Replication options:
–master master mode 主复制模式
–slave slave mode 从复制模式
–source arg when slave: specify master as 当为从时,指定主的地址和端口
–only arg when slave: specify a single database to replicate 当为从时,指定需要从主复制的单一库
–pairwith arg address of server to pair with
–arbiter arg address of arbiter server 仲裁服务器,在主主中和pair中用到
–autoresync automatically resync if slave data is stale 自动同步从的数据
–oplogSize arg size limit (in MB) for op log 指定操作日志的大小
–opIdMem arg size limit (in bytes) for in memory storage of op ids指定存储操作日志的内存大小

Sharding options:
–configsvr declare this is a config db of a cluster 指定shard中的配置服务器
–shardsvr declare this is a shard db of a cluster 指定shard服务器


数据库管理

命令usage

查看所有的数据库

show dbs;

查看当前数据库中的集合

show collections;

创建数据库
use xx
如果xx不存在,实际上什么也没发生。
只有当你调用了db.createCollection之后,新的数据库才被保存,然后你使用“show dbs”就可以看到新建的库。

使用某个数据库

use runoob;

当你 use xxx 数据库
这时候你的任何操作都是对这个数据库进行的。

删除数据库

db.dropDatabase()

先use xxx 数据库 ,然后再删除 db.dropDatabase()

插入文档

db.COLLECTION_NAME.insert(document)

插入要指定collection的名字,也就是要指定插入的集合。
同样的如果集合不在该数据库中,MongoDB会自动创建并插入文档。

集合不需要像 关系型数据库 的row 那样, 每个字段都对应好。两个集合可以是不同的字段对应组成。用id区别

插入文档,以及返回这个集合中的所有文档

db.runoob.insert({x:10})
db.runoob.find()

返回 这个集合 runoob
{“_id”:Objectid(“324234sadas”),”x”:10}

查看集合中的所有文档
db.cool.find() 查看文档!

MongoDB 查询集合中所有文档
db.COLLECTION_NAME.find()
find以非结构的方式来显示所有文档。
带参数的find()方法可以根据某个字段来查找:

coll.find({name:"ZhangSan"})

update() save()更新文档
- update() 用于更新已存在的文档
- save() 方法通过传入的文档来替换已有文档。

remove() 删除文档

db.collection.remove(,)

执行remove之前 先find判断执行的条件是否正确,这时一个比较好的习惯。
删除 title 为 Mongodb 的数据:

db.col.remove({'title':'mongodb'})

使用collection对象的remove(object)方法可以删除文档。它的参数是JS对象,它通过将你传入对象的属性与数据库内数据比对来匹配某一个文档,匹配到后删除,匹配不上就拉倒。假如你传递一个空的JS对象,就会删除这个集合里所有的文档。

对于数据库的一些内置方法

  • db.serverStatus() 显示数据库服务器状态
  • db.getCollectionNames() 显示数据库包含的集合名称列表
  • db.createCollection() 创建集合,也可以直接创建
  • db.COLLECTION_NAME.drop() 从数据库中删除某个集合
  • db.stats() 查询数据库统计信息

获取指定名字的集合
要得到集合对象,可以

use accounts
coll = db.getCollection("accounts")

删除集合
要删除集合,需要调用集合对象的drop()方法。

use accounts
coll = db.getCollection("accounts")
coll.drop();

向集合中添加文档

要把文档添加到集合,需要先得到collection对象,然后调用insert(document)方法。document参数是一个JSON对象。下面的命令往accounts集合里添加了两个用户:

use accounts
coll = db.getCollection("accounts")
coll.insert({name:"ZhangSan",password:"123456"})
coll.insert({name:"WangEr",password:"nicai"})

MongoDB AND条件

find() 方法可以传入 多个key,每个key逗号隔开

db.col.find({key1:value1,key2:value2}).pretty()

and 就是用逗号隔开,来筛选

MongoDB OR 条件

关键字$or 两个key value要用大括号包起来

 db.col.find({$or:[{"by":"cainiao"},{"xx":"yyy"}]}).pretty()
db.col.find({
    $or:[
        {key1:value1},{key2:value2}
    ]
})

AND 和 OR联合使用

db.col.find({"likes": {$gt:50}, $or: [{"by": "菜鸟教程"},{"title": "MongoDB 教程"}]}).pretty()
{
        "_id" : ObjectId("56063f17ade2f21f36b03133"),
        "title" : "MongoDB 教程",
        "description" : "MongoDB 是一个 Nosql 数据库",
        "by" : "菜鸟教程",
        "url" : "http://www.runoob.com",
        "tags" : [
                "mongodb",
                "database",
                "NoSQL"
        ],
        "likes" : 100
}

索引

索引通常能够极大的提高查询的效率!
MongoDB在读取数据时必须扫描集合中的每个文件并选取那些符合查询条件的记录。 这种全集合的查询效率很低!

索引是一个特殊的数据结构,索引存储在一个易于遍历读取的数据集合中,索引是对数据库表中一列或多列的值进行排序的结构!

使用ensureIndex() 来创建索引!

db.COLLECTION.ensureIndex({key:1})

key为你要创建的索引字段,1指定按升序创建索引。
-1表示降序

update 更新

db.collection.update(
    <query>,
    <update>,
    {
        upsert:<boolean>,
        multi:<boolean>,
        writeConcern:<document>
    }
)

更新增加一个字段:

db.user.update({'username':'mongo'},{$set:{'email':'assd@ww.com'}},{upsert:true})

这里写图片描述

Mysql 和MongoDB术语对比:
这里写图片描述

  • mysql table 对应 mongodb的 collection
    建一张表, 等同于建一个collection
    一个数据库中可以有多个collection 也就是多个table
  • 每个collection 有多个 documents 也就是record(ROW in mysql)
    区别每个record的 是_id , ObjectId
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值