标签:数据库 database 自己的 地址 三层 嵌入 持久层 内容 javascrip
数据库(Database)是按照数据结构来组织、存储和管理数据的仓库。
MongoDB是一个基于分布式文件存储的数据库,由C++语言编写,旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB是一个高性能,开源,无模式的文档型数据库,官方给自己的定义是Key-value存储(高性能和高扩展)和传统RDBMS(丰富的查询和功能)之间的一座桥梁。
MongoDB中保存的数据格式为BSON,如:
{
name: "sue",
age: 26,
status: "A",
groups: [ "news", "sports" ]
}
MongoDB中数据的基本单元称为文档(Document
),它是MongoDB的核心概念,由多个键极其关联的值有序的放置在一起组成,数据库中它对应于关系型数据库的行。 数据在MongoDB中以BSON
(Binary-JSON
)文档的格式存储在磁盘上。 BSON(Binary Serialized Document Format)是一种类json的一种二进制形式的存储格式,简称Binary JSON,BSON和JSON一样,支持内嵌的文档对象和数组对象,但是BSON有JSON没有的一些数据类型,如Date
和BinData
类型。 BSON的优点是灵活性高,但它的缺点是空间利用率不是很理想。 BSON有三个特点:轻量性、可遍历性、高效性。
use
命令可以用来创建一个新的数据库,也可以切换到一个已经存在的数据库:
use DATABASE_NAME
如果想查看当前所有数据库的列表,可以使用命令:
show dbs
如果想删除当前所使用的数据库,可以使用命令:
db.dropDatabase()
可以使用createCollection
方法来创建集合。
语法
db.createCollection(name, options)
参数说明
| 参数 | 类型 | 描述 | | --- | --- | --- | | Name
| String | 要创建的集合名称 | | Options
(可选) | Document | 指定有关内存大小和索引选项 |
Options
可以使用的选项:
| 字段 | 类型 | 描述 | | --- | --- | --- | | capped(可选) | Boolean | 如果为true
,则启用封顶集合。封顶集合是固定大小的集合,会自动覆盖最早的条目,当它达到其最大大小。如果指定true
,则需要也指定尺寸参数。 | | autoIndexID(可选) | Boolean | 如果为true
,自动创建索引_id
字段的默认值是false
。 | | size(可选) | Number | 指定最大大小字节封顶集合。如果封顶如果是 true
,那么你还需要指定这个字段。 | | max(可选) | Number | 指定封顶集合允许在文件的最大数量。 |
如果要删除掉某个集合,那么可以使用下面的命令:
javascript db.collection.drop()
在数据库中,数据插入是最基本的操作,在MongoDB使用db.collection.insert(document)
语句来插入文档。
document是文档数据,collection是存放文档数据的集合。 例如:所有用户的信息存放在users集合中,每个用户的信息为一个user文档,插入数据:
db.users.insert(user);
*注:如果user集合不存在,那么此时会自动创建user这个集合
insert语句不但可以插入单个文档,还可以一次性插入多个文档。 插入多个文档时,insert命令的参数为一个数组,数组元素为BSON格式的文档。 多个文档可以放在一个数组内,一次插入多条数据,例如:
db.users.insert([{name:"tommy"},{name:"xiaoming"}])
文档批量插入非常方便,但是使用批量插入时也有一些问题需要注意,因为BSON格式的限制,一次插入的数据量不能超过16M,在一个insert命令中插入多条数据时,MongoDB不保证完全成功或完全失败。
在MongoDB中,查询指向特定的文档集合,查询设定条件,指明MongoDB需要返回的文档;查询也可以包含一个投影,指定返回的字段。
在关系型数据库中,投影指的是对列的筛选,类似的,在MongoDB中,投影指的是对出现在结果集中的对象属性的筛选。
MongoDB中查询检索数据时使用find
命令,使用方法如下:
语法:
db.collection.find(criteria,projection);
参数说明:
criteria
– 查询条件,文档类型,可选。
projection
– 返回的字段,文档类型,可选,若需返回所有字段,则忽略此参数。
find命令两个可选参数,criteria为查询条件,projection为返回的字段,如果不传入条件数据库会返回该集合的所有文档。
update
命令可以更新指定文档的特定字段值,也可以替换整个文档,如果更新操作会增加文档大小,MongoDB将重新分配空间并重新定位。
语法:
db.collection.update(query,update,{upsert:boolean,multi:boolean});
参数:
query
- 查询条件,文档,和find中的查询条件写法一致。 update
- 修改内容,文档。? upsert
(可选) - 如果值为true
,那么当集合中没有匹配文档时,创建文档。默认false
。 multi
(可选) - 如果值为true
,那么将更新全部符合条件的文档,否则仅更新一个文档,默认false
。
save
命令可以更新或插入一个新文档,与update
命令不同的是,save
只能对一个文档进行操作。
语法:
db.collection.save();
参数:
document
- 新的文档;
需要删除文档时使用remove
命令,删除文档可以清理掉不需要的数据,释放存储空间,提升检索效率,但是错误的删除会是一场灾难,因此在执行数据删除操作时需要非常的谨慎!
语法:
db.collection.remove(
query,
justOne
);
参数:
query
- BSON类型,删除文档的条件。
justOne
- 布尔类型,true
:只删除一个文档,false
:默认值,删除所有符合条件的文档。
相等条件是最简单常用的的查询操作,查询条件是{ field:value }格式的BSON对象。
语法:
{ field: value }
比较条件也是最基本的查询条件之一,通过运算符的比较运算来筛选或排除文档,从而获取到我们想要的文档数据。
语法:
{ field: { op: value } }
op
$gt
: 大于$gte
: 大于等于$lt
: 小于$lte
: 小于等于$ne
: 不等于$in
: 包含于$nin
: 不包含于通过MongoDB中提供的丰富运算符,可以帮助你精确的来检索数据,比如数值型的字段可以使用$gt
、$gte
、$lt
、$ne
等运算符来比较,数组条件的可以使用$in
、$nin
来实现。
当字段包含数组,可以进行数组完全匹配或匹配特定的值。 单个元素匹配只需要传入元素的值即可,完全匹配需要传入一个数组,特定元素匹配需要"字段.索引"形式传入参数。
example:
数组完全匹配:
db.inventory.find( { tags: [ ‘fruit‘, ‘food‘, ‘citrus‘ ] } );
单个元素匹配:
db.inventory.find( { tags: ‘fruit‘ } );
特定元素匹配:
db.inventory.find( { ‘tags.0‘ : ‘fruit‘ } );
查询数据时,我们可能会遇到包含嵌入的子文档数据.
如果文档中包含嵌入的子文档,可以使用".key"的方式访问子文档节点,例如:
db.mycol.find({"access.level":5});
当查询条件为多个字段时,需要使用多字段复合条件查询。
example: 查询inventory集合中type字段为food并且价格低于95的所有文档。
db.inventory.find({
$and:[
{type: "food"},
{ price: { $lt: 95 }}
]
});
example: inventory集合中检索数量(qty)大于100或者($or)价格(price)小于9.95的所有数据。
db.inventory.find({
$or:[
{ qty: { $gt: 100 } },
{ price: { $lt: 9.95 } }
]
});
find命令并不直接返回结果,而是返回一个结果集的迭代器,即游标。
想要获取数据,我们可以使用next方法来遍历游标,如下:
var myCursor = db.inventory.find( { type: "food" } ); var myDocument = myCursor.hasNext() ? myCursor.next() : null; if (myDocument) { var myItem = myDocument.item; print(tojson(myItem)); }
当我们访问一个网址后都发生了什么?(HTTP事务)
- 1.输入网址
- 2.解析域名
- 把域名解析成IP地址
- 3.建立链接(三次握手)
- 第一次:客户端发送请求给服务端
- 第二次:客服端接送信息
- 点三次:客服端确认信息
- 4.发送数据
- 5.断开链接(四次挥手)
第一次握手→
第二次握手←
第三次握手→
双工信道:同时具备发送和接受信道
请求request:get 请求头 如:req.query.username. post 请求体 如:req.body.username
1.表现层
2.服务层
3.持久层
1.bin
2.dao 持久层
model
user.js 描述mongoose接收的数据结构类型
database.js 设置mongoose
userDao.js 用require引入mongoose
3.doc 放置规范文件的文件夹
4.node_modules 放置依赖文件
5.public 放置静态文件,例如js css html
6./routes 表现层
index.js
users.js 需要用 require.("") 引入 service(服务层)中的js文件 userService.js
7.service 服务层
userServicejs 需要用 require.("") 引入 dao(持久层)中的js文件 userDao.js
8.views
9.app.js 需要用 require.("地址") 引入dao(持久层)中的js文件
10.nmp-debug.log
11.package.json
标签:数据库 database 自己的 地址 三层 嵌入 持久层 内容 javascrip
原文地址:http://www.cnblogs.com/plainsailing/p/6060406.html