成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

MongoDB學(xué)習(xí)之Mongoose的使用

qieangel2013 / 1678人閱讀

摘要:文檔是的核心概念,是鍵值對(duì)的一個(gè)有序集,在里文檔被表示成對(duì)象。創(chuàng)建集合數(shù)據(jù)庫(kù)中的集合名稱(chēng)當(dāng)我們對(duì)其添加數(shù)據(jù)時(shí)如果已經(jīng)存在,則會(huì)保存到其目錄下,如果未存在,則會(huì)創(chuàng)建集合,然后在保存數(shù)據(jù)。使用創(chuàng)建,如下示例連接成功許巍男保存成功保存失敗參考

mongoose簡(jiǎn)介

mongoose網(wǎng)站:https://mongoosejs.com/

為什么要用Mongoose
Mongoose就是一個(gè)讓我們可以通過(guò)Node來(lái)操作MongoDB的一個(gè)模塊。
Mongoose本質(zhì)是一個(gè)對(duì)象文檔模型(ODM)庫(kù),
他對(duì)Node原生的MongoDB模塊進(jìn)行了一部?jī)?yōu)化封裝,并且提供了更多的功能。
Mongoose的優(yōu)勢(shì)

可以像操作對(duì)象一樣操作數(shù)據(jù)庫(kù)

可以為文檔創(chuàng)建一個(gè)模式結(jié)構(gòu)(Schema)

可以對(duì)模型中的文檔/文檔進(jìn)行驗(yàn)證

數(shù)據(jù)可以通過(guò)類(lèi)型轉(zhuǎn)換為對(duì)象模型

可以使用中間件來(lái)應(yīng)用業(yè)務(wù)邏輯掛鉤

比Node原生的MongoDB驅(qū)動(dòng)更容易

使用Mongoose

下載安裝mongoose模塊

cnpm install mongoose --save

引用mongoose:

var mongoose =require("mongoose");

使用"mongoose"連接數(shù)據(jù)庫(kù):

var db =mongoose.connect("mongodb://user:pass@localhost:port/database");

執(zhí)行下面代碼檢查默認(rèn)數(shù)據(jù)庫(kù)test,是否可以正常連接成功?

var mongoose =require("mongoose");
var db =mongoose.connect("mongodb://localhost/m_data");
db.connection.on("error",function (error) {
   console.log("數(shù)據(jù)庫(kù)連接失敗:" + error);
});
db.connection.on("open",function () {
   console.log("數(shù)據(jù)庫(kù)連接成功!");
});
db.connection.once("close", ()=>{
    console.log("連接已經(jīng)斷開(kāi)成功!")
})
mongoose基本使用 mongoose的幾個(gè)新的對(duì)象

在MongoDB中,多個(gè)Document可以組成Collection(以下簡(jiǎn)稱(chēng)集合),多個(gè)集合又可以組成數(shù)據(jù)庫(kù)。我們想要操作MongoDB數(shù)據(jù),那就得先要具備上面所說(shuō)的包含數(shù)據(jù)的“文檔”,文檔又是什么意思呢,請(qǐng)看如下介紹。

文檔 —— 是MongoDB的核心概念,是鍵值對(duì)的一個(gè)有序集,在JavaScript里文檔被表示成對(duì)象。同時(shí)它也是MongoDB中數(shù)據(jù)的基本單元,非常類(lèi)似于關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)中的行,但更具表現(xiàn)力。

集合 —— 由一組文檔組成,如果將MongoDB中的一個(gè)文檔比喻成關(guān)系型數(shù)據(jù)庫(kù)中的一行,那么一個(gè)集合就相當(dāng)于一張表。

Schema—— 一種以文件形式存儲(chǔ)的數(shù)據(jù)庫(kù)模型骨架,無(wú)法直接通往數(shù)據(jù)庫(kù)端,也就是說(shuō)它不具備對(duì)數(shù)據(jù)庫(kù)的操作能力,僅僅只是定義數(shù)據(jù)的類(lèi)型,可以說(shuō)是數(shù)據(jù)屬性模型(傳統(tǒng)意義的表結(jié)構(gòu)),又或著是“集合”的模型骨架。

mongoose中任何任何事物都是從Schema開(kāi)始的。每一個(gè)Schema對(duì)應(yīng)MongoDB中的一個(gè)集合(collection)。Schema中定義了集合中文檔(document)的樣式。

定義一個(gè)Schema(表/ 模式對(duì)象)
//新建Schema 定義規(guī)則/字段的規(guī)則
let Schema= mongoose.Schema;
//定義personSchema的字段(規(guī)則)需要new一下 有點(diǎn)像構(gòu)造函數(shù)的樣子
let personSchema= new Schema({
    name: String,
    sex: String,
    age: Number
});

基本屬性類(lèi)型有

String

Number

Date

Boolean

Buffer

ObjectId

Mixed

Array

Model—— 由Schema構(gòu)造生成的模型,根據(jù)Schema定義的數(shù)據(jù)類(lèi)型規(guī)則,可操作具體的符合改規(guī)則的數(shù)據(jù)。

創(chuàng)建model(集合)
let personModel= mongoose.model("person", personSchema);

person:數(shù)據(jù)庫(kù)中的集合名稱(chēng),當(dāng)我們對(duì)其添加數(shù)據(jù)時(shí)如果person已經(jīng)存在,則會(huì)保存到其目錄下,如果未存在,則會(huì)創(chuàng)建person集合,然后在保存數(shù)據(jù)。

//4. 插入文檔
personModel.create({
    name: "張寧樂(lè)",
    sex: "男",
    age: 18
}, (err)=>{
   if(!err){
       console.log("插入成功!")
   }else{
       throw err;
   }
});
mongoose 插入和查詢(xún)

mongoose查找數(shù)據(jù)的一些方法:
https://mongoosejs.com/docs/a...

插入多條數(shù)據(jù)
personModel.create([
    {name:"張逗逗",age: 2,sex: "男"},
    {name:"牛嘻嘻",age: 2,sex: "女"}
], (err)=>{
   if(!err){
       console.log("插入成功!")
   }else{
       throw err;
   }
})
查詢(xún)

Model.find()

personModel.find({name: "張寧樂(lè)"}, (err, data)=>{
    if(!err){
        console.log(data)
    }else{
        throw err;
    }
})
查詢(xún)所有

Model.find({}, callback)

personModel.find({}, (err, data)=>{
    if(!err){
        console.log(data)
    }else{
        throw err;
    }
})

也可以選擇查找數(shù)據(jù)的條件(0隱藏 1顯示 id默認(rèn)顯示) 和MongoDB在命令行中的使用方法一樣

//查詢(xún)時(shí)只顯示name 
personModel.find({}, {name: 1, _id: 0}, (err,data)=>{
    if(!err){
        console.log(data)
    }else{
        throw err;
    }
})

find() skip(查詢(xún)開(kāi)始的位置)和limit(增加的條數(shù))也可以使用

personModel.find({}, {name: 1, _id: 0, age: 1}, {skip: 0, limit: 2}, (err, data)=>{
    //只顯示name 和 age   從第1開(kāi)始 每次查詢(xún)2條 
    if(!err){
        console.log(data)
    }else{
        throw err;
    }
})

MongoDB的find()、findOne() 等命令在 mongoose里都可以使用
具體可參考 :https://mongoosejs.com/docs/a...

mongoose 修改和刪除

參考: https://mongoosejs.com/docs/a...

修改方法:

Model.update()

Model.updateMany()

Model.updateOne()

Model.watch()

personModel.update({name: "張寧樂(lè)"}, {$set: {age: 20}}, (err, data)=>{
   if(!err){
       console.log("修改成功!")
       console.log(data)
   }else{
       throw err;
   }
})

刪除方法

Model.remove()

Model.deleteMany()

Model.deleteOne()

personModel.remove({name:"牛嘻嘻"}, (err)=>{
    if(!err){
        console.log("刪除成功!")
    }else{
        throw err;
    }
})
統(tǒng)計(jì)文檔條數(shù)

Model.count()

personModel.count({}, (err,count)=>{
    if(!err){
        console.log("查詢(xún)條數(shù)成功! 一共:" + count + "條");
    }else{
        throw err;
    }
})

Entity

Entity—— 由Model創(chuàng)建的實(shí)體,使用save方法保存數(shù)據(jù),Model和Entity的操作都能影響數(shù)據(jù)庫(kù)的操作,但Model比Entity更具操作性。
使用Model創(chuàng)建Entity,如下示例:

let mongoose= require("mongoose");
let db= mongoose.connection("mongodb://localhost/m_data");
db.on("open", ()=>{
    console.log("連接成功!")
})
let Schema= mongoose.Schema;
let personSchema= new Schema({
    name: String,
    sex: String,
    age: Number
});
let personModel= mongoose.model("person", personSchema);
let personEntity = new personModel({
    name: "許巍",
    sex: "男",
    age: 38
})
personEntity.save((err, person)=>{
    if(!err){
        console.log("保存成功!")
        console.log(person);
    }else{
        console.log("保存失??!")
    }
})

參考:https://blog.csdn.net/swimmin...

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/19435.html

相關(guān)文章

  • Mongoose增刪查改

    摘要:通過(guò)構(gòu)造而成,除了具有定義的數(shù)據(jù)庫(kù)骨架以外,還可以具體的操作數(shù)據(jù)庫(kù)。通過(guò)創(chuàng)建的實(shí)體,它也可以操作數(shù)據(jù)庫(kù)。但比更具操作性。 原文鏈接:Mongoose 前言 學(xué)數(shù)據(jù)庫(kù)肯定需要知道怎么連接后臺(tái)Mongoose 是用來(lái)方便連接 MongoDB 與 node 的一個(gè)工具包是時(shí)候?qū)W習(xí)一波 nodejs連接MongoDB 連接數(shù)據(jù)庫(kù)前需要先打開(kāi)數(shù)據(jù)庫(kù) MongoDB yarn add mongoo...

    gityuan 評(píng)論0 收藏0
  • 使用express+mongoose對(duì)mongodb實(shí)現(xiàn)增刪改查操作

    摘要:項(xiàng)目地址寫(xiě)在開(kāi)頭本文主要分享我如何使用對(duì)實(shí)現(xiàn)增刪改查操作,感謝社區(qū)所有精品文章的幫助,以及的開(kāi)源項(xiàng)目對(duì)我的啟發(fā)。我們這個(gè)項(xiàng)目是建立一個(gè)班級(jí)學(xué)生管理系統(tǒng),能夠?qū)W(xué)生的姓名及學(xué)號(hào)進(jìn)行增刪改查的操作。 項(xiàng)目地址:https://github.com/jrainlau/mongoose_cru... 寫(xiě)在開(kāi)頭 本文主要分享我如何使用express+mongoose對(duì)mongodb實(shí)現(xiàn)增刪改查...

    Markxu 評(píng)論0 收藏0
  • 學(xué)mongoose(1)

    最近學(xué)習(xí)用nodejs做博客系統(tǒng),用了express框架。數(shù)據(jù)庫(kù)采用mongodb,具體用mongoose實(shí)現(xiàn),下面是mongoose的初步了解1、首先要安裝mongoose npm install mongoose2、 //db.js const mongoose=require(mongoose);//在文件中引用 const Schema=mongoose.Schema;//schema定義...

    shmily 評(píng)論0 收藏0
  • 學(xué)mongoose(1)

    最近學(xué)習(xí)用nodejs做博客系統(tǒng),用了express框架。數(shù)據(jù)庫(kù)采用mongodb,具體用mongoose實(shí)現(xiàn),下面是mongoose的初步了解1、首先要安裝mongoose npm install mongoose2、 //db.js const mongoose=require(mongoose);//在文件中引用 const Schema=mongoose.Schema;//schema定義...

    pubdreamcc 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<