一、安裝及配置mongodb
二、啓動服務時能夠指定db的路徑和端口
三、基本概念
四、基本指令
五、數據庫的CRUD(增刪改查)的操做
六、安裝圖形化工具
七、文檔之間的關係
八、sort和投影
九、mongoose
十、經過mongoose鏈接MongoDB
十一、mongoose之Schema和Model
十二、mongoose的增長,查詢方法
1三、mongoose的Document對象數據庫
一、安裝及配置mongodb <--返回目錄npm
1)下載安裝包:mongodb-win32-x86_64-2008plus-ssl-3.2.4-signed.msi數組
2)配置pathmongoose
3)cmd 執行 mongod命令工具
4)在d盤新建 data/db 目錄ui
5)cmd 執行mongod命令,啓動服務,出現提示:waiting for connections on port 27017; 不要關閉該窗口spa
6)新開一個cmd窗口,執行mongo命令,鏈接服務code
二、啓動服務時能夠指定db的路徑和端口 <--返回目錄對象
mongod --dbpath d:\xxx\data\db --port 10086
三、基本概念 <--返回目錄
1) 數據庫(database)
2) 集合(collection)
3) 文檔(document)
在MongoDB中,數據庫和集合都不須要手動建立,當咱們建立文檔時,若是文檔所在的集合或數據庫不存在會自動建立數據庫和集合
四、基本指令 <--返回目錄
show dbs
show databases
- 顯示當前的全部數據庫
use 數據庫名
- 進入到指定的數據庫中
db
- db表示的是當前所處的數據庫
show collections
- 顯示數據庫中全部的集合
五、數據庫的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()
六、安裝圖形化工具 <--返回目錄
安裝包:mongodbmanagerfree_inst.exe 或 studio-3t-x64.msi
七、文檔之間的關係 <--返回目錄
一對一(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()
八、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不查詢
九、mongoose <--返回目錄
mongoose中爲咱們提供了幾個新的對象
– Schema(模式對象): Schema對象定義約束了數據庫中的文檔結構
– Model: Model對象做爲集合中的全部文檔的表示,至關於MongoDB數據庫中的集合collection
– Document: Document表示集合中的具體文檔,至關於集合中 的一個具體的文檔
十、經過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()
十一、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 })
十二、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 } })
1三、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() } })
---