MongoDB简介
- MongoDB是为快速开发互联网Web应用而设计的数据库系统
- MongoDB的设计目标是极简、灵活、作为Web应用栈的一部分
- MongoDB的数据模型是面向文档的,所谓文档是一种类似于JSON的结构,简单理解MongoDB这个数据库中存的是各种各样的JSON。(BSON)
三个概念
- 数据库(database) – 数据库是一个仓库,在仓库中可以存放集合。
- 集合(collection) – 集合类似于数组,在集合中可以存放文档。(可以理解为一个表)
- 文档(document)– 文档数据库中的最小单位,我们存储和操作的内容都是文档。(可以理解为键值对)
创建数据库
/*
use 数据库名
–使用use时,如果数据库存在则会进入到相应的数据库,如果不存在则会自动创建
–一旦进入数据库,则可以使用db来引用当前库
db.collection.insert(文档)
–向集合中插入文档,如果集合不存在则创建
db.createCollection()
–创建一个新的集合
db.collection.drop()
–删除集合
*/
use test
db.user.insert({username:"zhangwuji"})
db.user.find()
CRUD-添加文档
/*
db.collection.insert (文档对象)
insert()可以用于向集合中添加一个或多个文档,可以传递一个对象,或一个数组。可以将对象或数组中的对象添加进集合中,添加时如果集合或数据库不存在,会自动创建插入的文档对象会默认添加_id属性,这个属性对应一个唯一的id,是文档的唯一标识
*/
/*
db.collection.insert()
-向集合中插入一个或多个文档
db.collection.insertOne()
-向集合中插入一个文档,改方法中只能传递一个document对象
db.collection.insertMany()
-向集合中插入多个文档,该方法只能接受一个数组作为参数
*/
db.user.insert({username:"zhangwuji"});
//插入多个文档,[]表示数组
db.user.insert([
{username:"aaa"},
{username:"bbb"},
{username:"ccc"}
])
db.user.insertOne({username:"zhaoming"})
CRUD-删除文档
/*
删除集合
db.collection.deleteOne()
-删除符合条件的第一个文档
db.collection.deleteMany()
-删除符合条件的所有文档
db.collection.remove()
-如果remove()中传递一个空的对象作为参数,则会删除集合中的所有文档,慎用!
db.collection.drop()
-删除集合,如果数据库中只有一个集合,会将数据库一起删除
db.dropDatebase()
-删除数据库
*/
//删除喜欢城市是beijing的用户
db.user.remove({"hobby.cities":"beijing"});
//删除user集合(数据备份,慎用)
db.user.remove({})
db.user.drop();
CRUD-修改文档
/*
db.collection.update(查询条件,新的对象)
-修改文档
-update()默认情况下会使用新的文档替换旧的文档,如果不希望整个替换文档,则需要使用修改器
修改器 $set、 $unset 、$inc、$push、$addToSet等
$set 用来向文档中添加一个属性,语法:db.test_coll.update(查询对象, {$set:更新对象});
$unset可以用来删除文档中一个不需要的字段,用法和set类似
$inc用来增加已有键的值,或者该键不存在那就创建一个
$inc只能用于Number类型的值
*/
//这样会用address把username给替换掉,而不是添加address
db.user.update({username:"zhangwuji"}, {address:"guangmingding"})
//添加的正确做法是使用$set修改器
db.user.update({username:"zhangwuji"}, {$set:{address:"guangmingding"}})
db.user.find();
//删除username为sunwukong的文档的address属性,使用$unset修改器
db.user.update({username:"zhangwuji"}, {$unset:{address:"guangmingding"}})
/*
MongoDB的文档的属性值也可以是一个文档,如果一个文档的属性值还是文档
那我们叫做内嵌文档
*/
//向username为sunwukong的文档中,添加一个hobby:{cities:["beijing","shanghai","shenzhen"] , movies:["sanguo","hero"]}
db.user.update({username:"zhangwuji"}, {$set:{hobby:{cities:["beijing","shanghai","shenzhen"] , movies:["sanguo","hero"]}}});
/*
$push 可以用来向数组中添加一个元素
$addToSet 用来向数组中添加一个不存在的元素
*/
//向tangseng中添加一个新的电影Interstellar
db.user.update({username:"zhaoming"}, {$push:{"hobby.movies":"Interstellar"}})
db.user.update({username:"zhangwuji"}, {$addToSet:{"hobby.movies":"Hello"}})
CRUD-查询文档
/*
find()、findOne()
db.collection.find()
-查询指定集合中所有符合条件的文档,不加参数,返回集合中的所有文档
-可以在find()添加一个对象作为查询条件
-返回的是一个数组
-可以将查询条件以键值对的形式添加到查询文档中
db.collection.findOne()
-返回集合中第一个满足条件的文档
-返回结果是一个对象,可以直接.属性
查询条件
$lt、$lte、$gt、$gte、$ne、$or、$in、$nin、$not、$exists、$and
*/
db.user.find();
//返回第一个符合条件username的值
db.user.findOne().username;
db.user.find()[0].username;
//返回username等于“aaa”的一条文档
db.user.find({username:"aaa"});
//查询喜欢电影hero的文档
db.user.find({"hobby.movies":"hero"})
//创建一个数组,用来保存文档
var arr = [];
for(var i=1; i <= 20000; i++){
arr.push({num:i})
}
db.numbers.insert(arr);
db.numbers.find();
//查询numbers中num为500的文档
db.numbers.find({num:{$eq:500}})
/*
查询操作符
$eq 查询指定的字段是否等于某个值
*/
db.numbers.find({num:500})
//查询numbers中num大于5000的文档
db.numbers.find({num:{$gt:5000}});
db.numbers.find({num:{$gte:5000}});
//查询numbers中num小于30的文档
db.numbers.find({num:{$lt:30}})
//查询numbers中num大于40小于50的文档
db.numbers.find({num:{$gt:40, $lt:50}})
//查询大于19000 或 小于40的
db.numbers.find({$or:[{num:{$gt:19000}}, {num:{$lt:40}}]})
//查询numbers中num大于19000的文档
db.numbers.find({num:{$gt:19000}})
//查看numbers集合中的前10条数据,limit()用来限制显示数据的最大的条数
db.numbers.find({}).limit(10)
/*
在MongoDB中通过limit()和skip()方法来完成分页
第一页 limit(10).skip(0)
第二页 limit(10).skip(10)
...
limit(每页条数).skip(每页条数*(页码-1))
*/
//每页五条记录
db.numbers.find().limit(10).skip(5)
db.numbers.find().limit(10).skip(10)
db.numbers.find().limit(10).skip(15)
db.numbers.find().limit(10).skip(20)