mongodb和mongoose
1、安装及配置mongodb
2、启动服务时可以指定db的路径和端口
3、基本概念
4、基本指令
5、数据库的CRUD(增删改查)的操作
6、安装图形化工具
7、文档之间的关系
8、sort和投影
9、mongoose
10、通过mongoose连接MongoDB
11、mongoose之Schema和Model
12、mongoose的增加,查询方法
13、mongoose的Document对象
1、安装及配置mongodb <--返回目录
1)下载安装包:mongodb-win32-x86_64-2008plus-ssl-3.2.4-signed.msi
2)配置path
3)cmd 执行 mongod命令

4)在d盘新建 data/db 目录
5)cmd 执行mongod命令,启动服务,出现提示:waiting for connections on port 27017; 不要关闭该窗口
6)新开一个cmd窗口,执行mongo命令,连接服务

2、启动服务时可以指定db的路径和端口 <--返回目录
mongod --dbpath d:\xxx\data\db --port 10086
3、基本概念 <--返回目录
1) 数据库(database)
2) 集合(collection)
3) 文档(document)
在MongoDB中,数据库和集合都不需要手动创建,当我们创建文档时,如果文档所在的集合或数据库不存在会自动创建数据库和集合
4、基本指令 <--返回目录
show dbs
show databases
- 显示当前的所有数据库
use 数据库名
- 进入到指定的数据库中
db
- db表示的是当前所处的数据库
show collections
- 显示数据库中所有的集合
5、数据库的CRUD(增删改查)的操作 <--返回目录
向数据库中插入文档 insert, insertOne, inserMany
- 向集合中插入一个文档 db.<collection>.insert(doc) - 例子:向test数据库中的,stu集合中插入一个新的学生对象{name:"xxx", age:20, gender:"男"} db.stu.insert({name:"xxx",age:20, gender:"男"})
- 插入多个文档
- db.stu.insert([{name:"xxx",age:20, gender:"男"}, {...}])
查询集合中的所有的文档
db.<collection>.find()
条件查询 find 返回一个数组, findOne 返回一个文档对象
db.<collection>.find({name: 'xxx'})
db.<collection>.find({age: {$gt: 10}})
统计count
db.<collection>.find().count()
修改 update默认只更新一条记录(默认同updateOne), updateOne, updateMany
/* 默认情况下会使用新对象来替换旧对象 */ db.stu.update({gender: '男'},{gender: 'male'})
/* 修改指定字段 */ db.stu.update({gender: '男'},{$set: {gender: 'male'}})
删除 remove(默认同deleteMany), deleteOne, deleteMany
/* 删除多个 */ db.stu.remove({gender: '男'})
/* 删除一个 */
db.stu.remove({gender: 'xx'}, true)
/* 删除所有,清空集合 */
db.stu.remove({})
/* 删除集合 */
db.stu.drop()
6、安装图形化工具 <--返回目录
安装包:mongodbmanagerfree_inst.exe 或 studio-3t-x64.msi

7、文档之间的关系 <--返回目录
一对一(one to one): 在MongoDB,可以通过内嵌文档的形式来体现出一对一的关系
db.wifeAndHusband.insert([ { name:"黄蓉", husband:{ name:"郭靖" } }, {...} ]);
一对多(one to many)或多对一(many to one)
db.users.insert([{_id:1, username:"zs1"},{_id:2, username:"zs2"}]);
db.order.insert({
list:["牛肉","漫画"],
user_id: 1
});
db.users.find()
db.order.find()
多对多(many to many)
db.teachers.insert([ {name:"洪七公"}, {name:"黄药师"}, {name:"龟仙人"} ]); db.stus.insert([ { name:"郭靖", tech_ids:[ ObjectId("59c4806d241d8d36a1d50de4"), ObjectId("59c4806d241d8d36a1d50de5") ] },{ name:"孙悟空", tech_ids:[ ObjectId("59c4806d241d8d36a1d50de4"), ObjectId("59c4806d241d8d36a1d50de5"), ObjectId("59c4806d241d8d36a1d50de6") ] } ]) db.teachers.find() db.stus.find()
8、sort和投影 <--返回目录
//查询文档时,默认情况是按照_id的值进行排列(升序) //sort()可以用来指定文档的排序的规则,sort()需要传递一个对象来指定排序规则 1表示升序 -1表示降序 //limit skip sort 可以以任意的顺序进行调用 db.emp.find({}).sort({sal:1,empno:-1}); //在查询时,可以在第二个参数的位置来设置查询结果的 投影,指定查询的字段 db.emp.find({},{ename:1 , _id:0 , sal:1}); // 1查询,0不查询
9、mongoose <--返回目录
mongoose中为我们提供了几个新的对象
– Schema(模式对象): Schema对象定义约束了数据库中的文档结构
– Model: Model对象作为集合中的所有文档的表示,相当于MongoDB数据库中的集合collection
– Document: Document表示集合中的具体文档,相当于集合中 的一个具体的文档
10、通过mongoose连接MongoDB <--返回目录
使用Mongoose必须先安装mongoose包: npm install mongoose
加载Mongoose: const mongoose = require("mongoose")
连接数据库: mongoose.connect("mongodb://127.0.0.1/test", { useMongoClient: true })
断开连接: mongoose.disconnect()
const mongoose = require("mongoose")
// WARNING: The `useMongoClient` option is no longer necessary in mongoose 5.x, please remove it.
// mongoose.connect("mongodb://127.0.0.1/test", { useMongoClient: true })
mongoose.connect("mongodb://127.0.0.1/test")
mongoose.connection.once('open', function() {
console.log('mongodb连接成功。。。')
})
mongoose.connection.once('close', function() {
console.log('mongodb断开连接。。。')
})
mongoose.disconnect()
11、mongoose之Schema和Model <--返回目录
const mongoose = require("mongoose")
mongoose.connect("mongodb://127.0.0.1/test")
mongoose.connection.once('open', function() {
console.log('mongodb连接成功。。。')
})
const Schema = mongoose.Schema
// 创建Schema对象
const stuSchema = new Schema({
name: String,
age: Number,
gender: {
type: String,
default: 'male'
},
address: String
})
// 通过Schema创建Model
// Model代表的是数据库中的集合,通过Model才能操作数据库
const stuModel = mongoose.model("stu", stuSchema)
// 向数据库中插入一个文档
stuModel.create({
name: '张三',
age: 10,
gender: 'male',
address: '中国广东省深圳市'
}, function(err) {
if (!err) console.log('插入成功...')
throw err
})
12、mongoose的增加,查询方法 <--返回目录
const mongoose = require("mongoose")
mongoose.connect("mongodb://127.0.0.1/test")
mongoose.connection.once('open', function () {
console.log('mongodb连接成功。。。')
})
const Schema = mongoose.Schema
// 创建Schema对象
const stuSchema = new Schema({
name: String,
age: Number,
gender: {
type: String,
default: 'male'
},
address: String
})
// 通过Schema创建Model
// Model代表的是数据库中的集合,通过Model才能操作数据库
const stuModel = mongoose.model("stu", stuSchema)
// 向数据库中插入一个文档
stuModel.create({
name: '张三1',
age: 10,
gender: 'male',
address: '中国广东省深圳市'
}, function (err, doc) {
if (!err) {
console.log('插入成功...')
console.log(doc)
console.log('主键返回,_id:', doc._id)
} else {
throw err
}
})
// find查询: 结果集是数组
// stuModel.find({name: '张三'}, function(err, docs) {
// if(!err) {
// console.log(docs[0].name)
// console.log(docs)
// }
// })
// findOne查询:结果集是对象
// stuModel.findOne({name: '张三'}, function(err, doc) {
// if(!err) {
// console.log(doc.name)
// console.log(doc)
// }
// })
// findByIde查询:结果集是对象
// stuModel.findById('5e3bd96d1ac8060958762b6a', function(err, doc) {
// if(!err) {
// console.log(doc.name)
// console.log(doc)
// }
// })
// 第二参数:投影,即需要查询的字段
// stuModel.find({name: '张三'}, {name: 1, age:1, _id: 0}, function(err, docs) {
// if(!err) {
// console.log(docs[0].name)
// console.log(docs)
// }
// })
stuModel.find({ name: '张三' }, 'name age -_id', function (err, docs) {
if (!err) {
console.log(docs[0].name)
console.log(docs)
}
})
const mongoose = require("mongoose")
mongoose.connect("mongodb://127.0.0.1/test")
mongoose.connection.once('open', function () {
console.log('mongodb连接成功。。。')
})
const Schema = mongoose.Schema
// 创建Schema对象
const stuSchema = new Schema({
name: String,
age: Number,
gender: {
type: String,
default: 'male'
},
address: String
})
// 通过Schema创建Model
// Model代表的是数据库中的集合,通过Model才能操作数据库
const stuModel = mongoose.model("stu", stuSchema)
stuModel.updateOne({ name: '张三' }, {$set: {age: 100}}, function (err, result) {
if (!err) {
console.log(result) // {ok: 1, nModified: 0, n: 1}
}
})
stuModel.deleteOne({ name: '张三' }, function (err, result) {
if (!err) {
console.log(result) // {ok: 1, n: 1, deleteCount: 1}
}
})
stuModel.count({ name: '张三1' }, function (err, result) {
if (!err) {
console.log(result) // 3
}
})
13、mongoose的Document对象 <--返回目录
Document与集合中的文档对应,Document是Model的实例,通过Model查询到的结果都是Document

save()方法
const mongoose = require("mongoose")
mongoose.connect("mongodb://127.0.0.1/test")
mongoose.connection.once('open', function () {
console.log('mongodb连接成功。。。')
})
const Schema = mongoose.Schema
// 创建Schema对象
const stuSchema = new Schema({
name: String,
age: Number,
gender: {
type: String,
default: 'male'
},
address: String
})
// 通过Schema创建Model
// Model代表的是数据库中的集合,通过Model才能操作数据库
const stuModel = mongoose.model("stu", stuSchema)
const stu = new stuModel({
name: 'zs',
age: 30,
gender: 'male',
address: 'xxx'
})
/* 打印结果
stu: { gender: 'male',
_id: 5e3bf0b7e77e9411fcfe3963,
name: 'zs',
age: 30,
address: 'xxx' }
*/
console.log('stu: ', stu)
stu.save(function (err, result) {
if (!err) {
console.log('保存成功...')
console.log('result: ', result)
}
})
/*
result: { gender: 'male',
_id: 5e3bf0b7e77e9411fcfe3963,
name: 'zs',
age: 30,
address: 'xxx',
__v: 0 }
*/
update()方法和remove()方法
const mongoose = require("mongoose")
mongoose.connect("mongodb://127.0.0.1/test")
mongoose.connection.once('open', function () {
console.log('mongodb连接成功。。。')
})
const Schema = mongoose.Schema
// 创建Schema对象
const stuSchema = new Schema({
name: String,
age: Number,
gender: {
type: String,
default: 'male'
},
address: String
})
// 通过Schema创建Model
// Model代表的是数据库中的集合,通过Model才能操作数据库
const stuModel = mongoose.model("stu", stuSchema)
const stu = new stuModel({
name: 'zs',
age: 30,
gender: 'male',
address: 'xxx'
})
stuModel.findById('5e3bf0b7e77e9411fcfe3963', function(err, doc) {
if (!err) {
console.log('查询成功, doc: ', doc)
console.log('doc instanceof stuModel: ', doc instanceof stuModel) // true
doc.update({name: 'zs111'}, function(err, result) {
if (!err) {
console.log('更新成功, result: ', result)
}
})
}
})
stuModel.findById('5e3bf0b7e77e9411fcfe3963', function(err, doc) {
if (!err) {
console.log('查询成功, doc: ', doc)
console.log('doc instanceof stuModel: ', doc instanceof stuModel) // true
doc.remove(function(err, result) {
if (!err) {
console.log('删除成功, result: ', result)
}
})
}
})
另一种修改方式:
stuModel.findById('5e3be238816b4f69242071da', function(err, doc) {
if (!err) {
console.log('查询成功, doc: ', doc)
console.log('doc instanceof stuModel: ', doc instanceof stuModel) // true
// doc.update({name: 'zs111'}, function(err, result) {
// if (!err) {
// console.log('更新成功, result: ', result)
// }
// })
doc.name = 'test'
doc.save()
}
})
---
posted on 2020-02-03 23:28 wenbin_ouyang 阅读(349) 评论(0) 收藏 举报
浙公网安备 33010602011771号