mongodb初步理解

memcached KV缓存

redis  KV缓存

1.mongodb 文档数据库,存储的是文档(Bjson>json的二进制化)

mongodb是在磁盘上分配一块空间,将该空间格式化成gridft格式,在该空间存储json格式文档,为了介绍存储量,将json以二进制的形式存储。

mongodb用chrome V8引擎来解析js。

2.mongodb特点:

内部执行引擎为JS解析器,把文档存储成bson结构,在查询时候转换为JS对象,并可以通过熟悉的JS语法来操作。

mongodb与传统数据库的不同:

传统型数据库:结构化数据,定好了表结构后,每一行的内容,必须符合表结构。

mongodb文档型数据库:表下的每篇文档都可以有自己的独特结构(json对象都可以有自己的属性和值)

思路:如果有电影,影评,影评回复,回复的打分。在传统型数据库中需要多表关联,在文档型数据库中一篇文档就可以完成,

{
    frim:"小红帽”,
    
    comment:[{
              cid:19,
                        contect:"风格与众不同",}
              {cid:20,
                        rcontect:"支持"}]
                        }
                    ]
}

3.mongodb的安装

https://www.mongodb.com/

右上角 Download

解压文件即可,不用编译,本身就是编译后的二进制可执行文件。

bsondump :导出bson结构

mongo:客户端(相当于mysql.exe)

mongod:服务器端(相当于mysqld.exe)

mongodump:整体数据库导出(二进制,相当于mysqldump)

mongoexport:导出易识别的json文档和csv文档。

mongodrestore:数据库整体导出

mongods:路由器分片时用。

4.启动mongod服务

./bin/mongod --bdpath/path/to/database --logpath/path/to/log-file --fork --port 27017

参数解释:

--bdpath:数据库存储目录

--logpath:日志存储文件

--port:运行端口(默认27017)

--fork:要不要在后台运行。

5.mongodb非常的占磁盘空间,

刚启动要占3-4G左右。如果用虚拟机练习,可能空间不够,导致无法启动。

可以用 --smallfiles选项来启动。将会占用较少空间 400M左右。

6.mongo入门命令:

show dbs :查看当前数据库

use databaseName:选库

show tables/collections :查看当前库下的collection

如何建库:

在mysql中用create table ,而在mongodb中隐式创建,你可以use一个不存在的库,然后再该库下创建collection,即可创建库。

db.createCollection("collectionName")创建collection

collection允许隐式创建: db.collectionName.insert(document)

7.mongo基本操作

增:insert

语法:db.collectionName.insert(document);

eg:增加单篇文档

db.sto.insert({"title":"葫芦娃"});

增加单篇文档并增加ID

db.sto.insert({"id":1,"title":"葫芦娃"});

增加多篇文档

db.sto.insert([

  {"title":"葫芦娃",age:3},

  {"title":"美猴王",age:3},

       {"title":"美猴王",age:3}

);

删:remove

语法:db.collectionName.remove(查询表达式,选项)

选项是指(justOne:true/false) true:只删除一行,false:删除所有符合条件的数据

eg:删除一行

db.sto.remove({"title":"美猴王"},true);

删除多行

db.sto.remove({"title":"美猴王"});

改:uodate

改那几行?----- 查询表达式

改成什么样子? -----新值或者赋值表达式

操作选项 -----可选参数

语法:db.collection.update(查询表达式,新增,选项)

db.sto.update({"title":"美猴王"},{"title":"lalala");是指在sto表中,将title=“美猴王”的文档的,将其文档值改成({“title”:“MSN"})

文档中的其他列都不见了,只剩下"id"和"title".因为以文档为单位

修改时候赋值表达式:

$set  修改某列的值

$unset 删除某个列

$rename 重命名某个列

$inc 增长某个列

$setOnInsert 当upset为true时,并且发生了insert操作时,可以补充字段。

option的作用

{upsert:true/false,multi:true/false}

upsert是指没有匹配的行,则直接插入该行。(和mysql的replace一样)

eg:db.sto.update({"name":"wuwuw"},$set:{"name":"lili"}},{upsert:true})

如果有{"name":"wuwuw"}的文档,就被修改成{"name":"lili"}

如果没有,就添加新文档{"name":"lili"}

multi:是指修改多行(默认即使是查询表达式命中多行,也只改一行。如果想改多行,就加multi)。

查:find,findOne

语法:db.collectionName.find(查询表达式,查询列);

db.collections.find(表达式,{列1:1,列2:1});

eg:db.sto.find()

查询所有文档 所有内容。

eg:db.sto.find({},{gendre:1})

查询所有文档的gendre属性(_id属性默认总是查出)

eg:db.sto.find({},{gendre:1,_id:0})

查询所有文档的gendre属性,且不查询_id属性

eg:db.sto.find({gendre:"male"},{name:1,_id:0})

查询所有文档的gendre属性值为male的文档中的name属性。

原文地址:https://www.cnblogs.com/maoyizhimi/p/7147462.html