Nosql_MongoDB数据库配置以及基本指令
数据库(database)
-数据库的服务器
-服务器用来保存数据
-mongod用来启动服务器
-数据库的客户端
-客户端用来操作服务器,对数据进行增删改查的操作
-mongo用来启动客户端
(不能关闭启动的服务器,否则新开的客户端无法连接)
扩展:将mongodb设置为系统服务,可以自动在后台启动,不需要每次收到启动(http://docs.mongodb.com/manual/tutorial/install-mongodb-on-windows/)
①-在C盘根目录data文件夹中创建log文件夹
②-创建配置文件
在目录 (你安装MongoDB的路径)下添加一个配置文件
mongod.cfg
(内容:
systemLog: destination: file path: c:\data\log\mongod.log storage: dbPath: c:\data\db
)
③-以管理员的身份打开命令行窗口
④-执行如下命令
sc.exe create MongoDB binPath= "\"C:\MongoDB\bin\mongod.exe\" --service --config=\"C:\MongoDB\mongod.cfg\"" DisplayName= "MongoDB" start= "auto"
备注:sc.exe create MongoDB binPath= "\"mongod的bin目录\mongod.exe\" --service --config=\"mongo的安装目录\mongod.cfg\"" DisplayName= "MongoDB" start= "auto"
⑤-启动mongodb服务
⑥-如果启动失败,证明上边的操作有误,
在控制台输入 sc delete MongoDB 删除之前配置的服务
然后从第一步再来一次
-- 基本概念
数据库(database)
集合 (collection)
文档(document)
-在MongoDB中,数据库和集合都不需要手动创建
当我们创建文档时,如果文档所在的集合或者数据库不存在会自动创建数据库和集合
-- 基本指令
show dbs
show databases
- 显示当前的所有数据库
use 数据库名
- 进入到指定的数据库中
db
- db表示的是当前所处的位置
show collections
- 显示数据库中所有的集合
-- 数据库的CRUD(增删改查)的操作
- 向数据库中插入文档
db.<collection>.insert(doc)
- 向集合中插入一个文档
- 例子: 向test数据库中的,stus集合中插入一个新的学生对象
{name:"孙悟空",age:12,gender:"男"} db.stus.insert({name:"孙悟空",age:12,gender:"男"})
db.<collection>.find()
- 查询当前集合中所有的文档
①-插入数据
向数据库中插入文档
db.<collection>.insert()
- 向集合中插入一个或多个文档
- 当我们向集合中插入文档时,如果没有给文档指定_id属性,则数据库会自动为文档添加_id,该属性用来作为文档的唯一标
- _id我们可以自己指定,如果我们指定了数据库就不会再添加了,如果自己指定_id 也必须确保它的唯一性
db.<collection>.insertOne()
- 插入一个文档对象
db.<collection>.insertMany() - 插入多个文档对象
②-查询
查询
db.collention.find() - find()用来查询集合中所有符合条件的文档 - find()可以接收一个对象作为条件参数 {}表示查询集合中所有的文档 {属性:值} 查询属性是指定值的文档
db.collection.findOne() - 用来查询集合中符合条件的第一个文档 - findOne()返回的是一个文档对象
db.collection.find({}).count() - 查询所有结果的数量
③-修改
修改
db.collection.update(查询条件,新对象) - update()默认情况下使用新对象替换旧对象 - 如果需要修改指定的属性,而不是替换需要使用"修改操作符"来完成修改
$set 可以用来修改文档中的指定属性 $unset 可以用来删除文档中的指定属性 - update()默认修改一个
db.collection.updateOne() - 修改一个符合条件的文档
db.collection.updateMany() - 同时修改多个符合条件的文档
db.collection.replaceOne() - 替换一个文档
④-删除
删除
db.collection.remove() - 删除符合条件的所有文档(默认情况下会删除多个) 如果remove()第二个参数传递一个true,则只会删除一个
- 如果只传递一个空对象作为参数,则会删除集合中的所有文档
db.collection.deleteOne() db.collection.deleteMany() - remove()可以根据条件来删除文档,传递的条件的方式和find()一样 db.collection.drop(); - 删除集合 db.dropDatabase() - 删除数据库
文档(document)
文档是MongoDB中数据的基本单元,类似关系数据库的行,多个键值对有序的放置在一起便是文档
MongoDB中以文档的方式存取记录,如一条记录格式如下:
{“username”:“sunsu”,“age”:12,email:'damowang@huohu.com','sex':女} {“username”:“sunsu”,“age”:12} {“Username”:“sunsu”,“age”:12} {“Username”:“sunsu”}
注意:
(1)以上是几个不同的文档,MongoDB区分大小写的数据类型,第一个age字段是数字类型,第二个age是字符串类型
(2)每一个文档尺寸不能超过16M
(3)MongoDB的文档不能有重复的键
(4)文档的键是字符串。除了少数例外情况,键可以使用任意UTF-8字符
文档之间的关系:
一对一(one to one)
- 夫妻 (一个丈夫 对应 一个妻子)
- 在MongoDB,可以通过内嵌文档的形式来体现出一对一的关系
一对多(one to many)/多对一(many to one)
- 父母 - 孩子
用户 - 订单
文章 - 评论
- 也可以通过内嵌文档来映射一对多的关系
多对多(many to many)
- 分类 - 商品
老师 - 学生
举例:
//一对一
db.wifeAndHusband.insert([{ name:"黄蓉", husband:{ name:"郭靖" } }, { name:"潘金莲", husband:{ name:"武大" } } ]); db.wifeAndHusband.find();
//一对多 用户(users)和订单(orders)
db.users.insert([{ username:"孙悟空"},{ username:"猪八戒"}]); db.order.insert({list:["苹果","香蕉","大鸭梨"], user_id:ObjectId("5d2bd20b782eae7ac9b5b5be") }); db.users.find(); db.order.find(); //查找用户孙悟空的订单 var user_id = db.users.findOne({ username:"孙悟空"})._id; db.order.find({ user_id:user_id});
//多对多
db.teachers.insert([{ name:"洪七公"},{ name:"黄药师"},{ name:"龟仙人"}]); db.stus.insert([{ name:"郭靖", tech_ids:[ ObjectId("5d2bd518782eae7ac9b5b5c4"), ObjectId("5d2bd518782eae7ac9b5b5c5") ]},{ name:"孙悟空", tech_ids:[ ObjectId("5d2bd518782eae7ac9b5b5c4"), ObjectId("5d2bd518782eae7ac9b5b5c5"), ObjectId("5d2bd518782eae7ac9b5b5c6") ]}]); db.teachers.find(); db.stus.find();
集合(collection)
集合就是一组文档,多个文档组成一个集合,集合类似于mysql里面的表,
无模式是指,在同一个集合中可以包含不同格式的文档,如:
{“Name”:“Mongodb”,“Type”:“Nosql”}
{“UserName”:“Sunsu”,“age”:12,“Gender”:“male”}
以上两个文档可以放在同一个集合中
在mysql需要先建表再插入数据
模式自由:意思是集合里面没有行和列的概念
注意:MongoDB中的集合不用创建、没有结构,所有可以放不同格式的文档