MongoDB
Posted 烦嚣城中
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MongoDB相关的知识,希望对你有一定的参考价值。
MongoDB 是非关系型数据库,NoSQL,不需要使用 SQL 语句
菜鸟教程 中说到,MongoDB 将数据存储为一个文档,数据结构由键值对组成,文档类似于 JSON 对象
数据库在 MongoDB 也叫数据库,但数据表叫集合(数组),表数据叫文档
可以把整个 MongoDB 当作是个大对象,里面存储着对象(数据库),对象里存储着数组(集合),数组里只能存对象,一条记录就是一个对象,而对象里可以存任意类型数据
MongoDB 文档结构很灵活没有任何限制,不需要像 mysql一样先创建数据库、表、设计表结构,需要插入数据时指定往哪个数据库的哪个集合操作即可,一切由 MongoDB 来帮自动完成建库建表
安装
官网 下载社区版(Community Server),因为免费
默认装C盘,安装路径为 C:\\Program Files\\MongoDB,安装后将到 bin 目录路径配置到环境变量 path 中
启动
MongoDB 不像 MySQL 可以在控制面板的服务启动,如何想在服务里启动,可以去菜鸟里查看教程
另一种启动方式是命令行执行 mongod 命令,默认会使用所处磁盘根目录下的 data/db 作为自己的数据存储目录
若是在C盘打开的 DOS 窗口,则会存储在C盘根目录下的 data/db,在其他盘运行命令的话就要先手动在当前磁盘根目录创建 data/db
如图所示就是C盘根目录没有 data/db
手动创建 data/db 后再执行 mongod 命令,成功启动数据库
想更改默认的数据存储命令,可运行
mongod --dbpath=数据存储目录路径
停止
直接关闭当前 DOS 窗口或者 Ctrl + C 即可
连接
执行 mongod 后不要关闭控制台,再打开一个新的DOS窗口,执行 mongo ,该命令会默认连接本机的 MongoDB 服务,退出的话在连接状态使用 exit 命令
注意,若数据库没开(就是 mongod 命令没执行)是不能连接的
命令
show dbs 命令显示所有数据库
db 命令查看当前操作的数据库,默认使用 test 数据库,因为 test 此时没有数据,所以 show dbs 命令后没有显示 test
use 数据库名 命令用于切换到指定的数据库(没有的话会新建),没有数据,所以也不会显示
use 之后,此时的db就代表 student 数据库
Node 中操作 MongoDB
官方的 mongodb 原生的包操作不太方便,所以一般是使用第三方的 mongoose 来操作 MongoDB
mongoose 是基于官方的 mongodb 包再一次做了封装
使用方式,npm 下载后在代码中用 request() 来加载即可使用
mongoose官网 有使用示例和使用文档
执行上面示例后,可以查询到test数据库里有了cats集合
示例详解
var mongoose = require(\'mongoose\')
var Schema = mongoose.Schema
//1.连接数据库
//连接本机test数据库,MongoDB是动态的,指定的数据库不需要存在,插入一条数据后会自动被创建
mongoose.connect(\'mongodb://localhost/test\')
//2.设计文档结构(表结构)
//字段名就是表结构中的属性名,还可加约束
var userSchema = new Schema({
username:{
type:String, //username字段,type为字段数据类型
required:true //添加约束,表示username字段不能为空
},
password:{
type:String,
required:true
},
age:Number
})
//3.将文档结构发布为模型
/*第一个参数传入一个大写名词单数字符串用来表示数据表名,mongoose会自动将
大写名词字符串生成小写复数的集合名称users
第二个参数为架构Schema,自定义的表结构
返回值是模型构造函数
*/
var User = mongoose.model(\'User\',userSchema)
//4.有了模型构造函数后,就可用这构造函数对users集合进行操作
var user = new User({
username:\'admin\',
password:\'123456\',
age:18
})
//5.持久化存储,存储时要先启动服务器,data为插入的数据
user.save(function (err,data) {
if(err){
console.log(\'保存失败\')
}else{
console.log(\'保存成功\')
}
})
MongoDB 自动会帮设置 id 字段(字段名是 _id ),所以不用手动设置 id,id 是字符串并且被双引号括起来
查询数据
除了数据的添加是要新建对象user,其他直接使用 mongoose.model( \' User \' , userSchema ) 返回的 User 调用方法
//查询集合中所有数据,返回的是一个数组
User.find(function (err,data) {
if(err){
console.log(\'查询失败\')
}else{
console.log(data)
}
})
//按条件查询,查询username为admin的数据,有多个条件的话继续写上即可
User.find({
username:\'admin\'
},function (err,data) {
})
//按条件查询,返回对象.若不写条件则返回第一条记录.另外有findById()根据id来查询对象
User.findOne({
username:\'admin\'
},function (err,data) {
})
删除数据
//删除所有符合条件的数据,多条件的话再加上即可
User.remove({
username:\'admin\'
},function (err,data) {
if(err){
console.log(\'删除失败\')
}
})
//根据条件删除一个:findOneAndRemove(conditions,[options],[callback])
//根据id删除一个:findByIdAndRemove(id,[options],[callback])
更新数据
//根据id更新数据,id、要更新的内容、callback
User.findByIdAndUpdate(\'1001\',{
password:\'123\'
}),function (err,data) {
if(err){
console.log(\'更新失败\')
}
}
//根据指定条件更新一个:findOneAndUpdate([conditoins],[update],[callback])
以上是关于MongoDB的主要内容,如果未能解决你的问题,请参考以下文章
ios - Heroku 和 MongoDb 上的自定义解析服务器错误 3080:JSON 文本没有以数组或对象开头,并且允许未设置片段的选项
在 Spring MongoDB 的 ReplaceRoot 管道阶段使用 $mergeObjects