非关系数据库适用场景:
优点:
非关系型数据库是相对关系型数据库来讲的,又被称为 NoSQL 数据库,也可以叫作Not Only SQL 数据库 。
相比传统的 SQL 关系型数据库,其最大的特点就是适合存储非结构化或半结构化的数据,适合存储大规模数据。
以键值对存储,且结构不固定,每一个元组可以有不一样的字段,每个元组可以根据需要增加一些自己的键值对,这样就不会局限于固定的结构,可以减少一些时间和空间的开销 。
弊端:
但是,其没有关系型数据库那种严格的数据模式 , 并不适合复杂的查询以及需要强事务管理的业务 。
// 创建数据库
// 如果数据库不存在,则创建数据库,否则切换到指定数据库
use MyNoSQlDB
/**
* 删除数据库
* 进入相应到数据库下,执行
* db.dropDatabase()
**/
// 显示所有集合
show collections
// 创建集合
// 创建固定集合 mycol,整个集合空间大小 6142800 KB, 文档最大个数为 10000 个。
db.createCollection("mycol", { capped : true, autoIndexId : true, size : 6142800, max : 10000 } )
// 删除集合
db.mycol.drop();
/**
*
MongoDB 使用 insert() 或 save() 方法向集合中插入文档,语法如下:
db.COLLECTION_NAME.insert(document)
**/
db.firstcol.insert({"name":"first try"})
// 使用变量插入数据
document = ({title: 'IamTitle',
description: 'MongoDB 是一个 Nosql 数据库',
by: 'xuhang666',
url: 'https://www.baidu.com',
tags: ['mongodb', 'database', 'NoSQL'],
likes: 100
})
db.xuhang.insert(document)
// 创建集合并插入数据
db.oldxu.insert({"name":"xuhang","age":99,"sex":"man"})
// 修改语句
/**
*
db.collection.update(
<query>,
<update>,
{
upsert: <boolean>,
multi: <boolean>,
writeConcern: <document>
}
)
*
**/
db.xuhang.update({"title":'IamTitle'},{$set:{"title":"newTitle"}},{"multi":true})
// 删除语句
/**
*
db.collection.remove(
<query>,
{
justOne: <boolean>,
writeConcern: <document>
}
)
query :(可选)删除的文档的条件。
justOne : (可选)如果设为 true 或 1,则只删除一个文档,如果不设置该参数,或使用默认值 false,则删除所有匹配条件的文档。
writeConcern :(可选)抛出异常的级别。
*
**/
db.xuhang.remove({'title':"newTitle"}, {'justOne':true})
// 查询语句
/**
*
db.collection.find(query, projection)
query :可选,使用查询操作符指定查询条件
projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)
如果你需要以易读的方式来读取数据,可以使用 pretty() 方法,语法格式如下:
db.xuhang.find().pretty()
**/
db.xuhang.find({'name':'tom'})
/**
*
MongoDB 与 RDBMS Where 语句比较
如果你熟悉常规的 SQL 数据,通过下表可以更好的理解 MongoDB 的条件语句查询:
操作 格式 范例 RDBMS中的类似语句
等于 {<key>:<value>} db.col.find({"by":"菜鸟教程"}).pretty() where by = '菜鸟教程'
小于 {<key>:{$lt:<value>}} db.col.find({"likes":{$lt:50}}).pretty() where likes < 50
小于或等于 {<key>:{$lte:<value>}} db.col.find({"likes":{$lte:50}}).pretty() where likes <= 50
大于 {<key>:{$gt:<value>}} db.col.find({"likes":{$gt:50}}).pretty() where likes > 50
大于或等于 {<key>:{$gte:<value>}} db.col.find({"likes":{$gte:50}}).pretty() where likes >= 50
不等于 {<key>:{$ne:<value>}} db.col.find({"likes":{$ne:50}}).pretty() where likes != 50
*
**/
/**
*AND 和 OR 联合使用
*/
db.xuhang.find({'age':{$gt:18}, $or:[{'sex':'man'}]}).pretty()