mongodb和mongoose

錄:mongodb

一、安裝及配置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() } })

---

相關文章
相關標籤/搜索