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

資訊專欄INFORMATION COLUMN

mongodb數(shù)據(jù)庫及數(shù)據(jù)分頁

neuSnail / 965人閱讀

摘要:在做自己的一個小項(xiàng)目時,新學(xué)習(xí)了非關(guān)系型數(shù)據(jù)庫,使用了封裝好的查詢方法,包括數(shù)據(jù)庫分頁用到的和方法,這里記錄下。

在做自己的一個小項(xiàng)目時,新學(xué)習(xí)了mongodb非關(guān)系型數(shù)據(jù)庫,使用了mongoose封裝好的查詢方法,包括數(shù)據(jù)庫分頁用到的limit和skip方法,這里記錄下。
1. mongodb數(shù)據(jù)庫連接

參照官網(wǎng)文檔對應(yīng)的參數(shù)如下:

mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]

使用mongoose進(jìn)行數(shù)據(jù)庫的連接

const dataBaseUrl = config.admin.username
  ? `mongodb://${config.admin.username}:${config.admin.pwd}@${config.host}/share-resource`
  : `mongodb://${config.host}/share-resource`;
mongoose.connect(dataBaseUrl, { useNewUrlParser: true });

若出現(xiàn)警告信息:要求使用新的編譯方式,則在連接的時候加上useNewUrlParser: true

DeprecationWarning: current URL string parser is deprecated, and will be removed in a future version.
To use the new parser, pass option { useNewUrlParser: true } to MongoClient.connect.
mongoose.connect(dataBaseUrl, { useNewUrlParser: true });

在連接數(shù)據(jù)庫時,對連接操作進(jìn)行監(jiān)聽處理

mongoose.connection.on("connected", function() {
  console.log("Mongoose connection open to " + dataBaseUrl);
});
/* 連接數(shù)據(jù)庫異常 */
mongoose.connection.on("error", function(err) {
  console.log("Mongoose connection error:" + err);
});
/* 連接數(shù)據(jù)庫斷開 */
mongoose.connection.on("disconnected", function() {
  console.log("Mongoose connection disconnected");
});
2. 數(shù)據(jù)類型(mongoose中提供的schemaTypes)

數(shù)據(jù)類型有:String,Number,Date,Buffer,Boolean,ObjectId,Array,Mixed,Map,Decimal128

在數(shù)據(jù)庫直接用insert方法進(jìn)行數(shù)據(jù)插入時,若不強(qiáng)制指定數(shù)字的類型,則默認(rèn)是插入double型數(shù)字

3. mongoose對數(shù)據(jù)庫操作的方法 3.1 數(shù)據(jù)的插入

先要新建schema文件

const mongoose = require("../database/mongodbHelper");
const Message= mongoose.Schema;
const RecordModel = new Message({
  message: String,
  name: String,
  num: Number,
},{
  versionKey: false
});
module.exports = mongoose.model("using_records", RecordModel);

在使用schema對進(jìn)行數(shù)據(jù)的插入時,若直接插入,則會在新的集合中多出一個_v字段,這個代表的是集合的版本號,可以在schema中加入versionKey: false來刪除_v字段

數(shù)據(jù)插入:使用save方法

const record= new Record({
    message: req.body.message,
    name: req.body.name,
    num: req.body.num,
});
record.save((err, docs) => {
  if (err) {
    res.send({ "status": -1, "msg": "插入失敗" });
  } else {
    res.send({ "status": 200, "msg": "插入成功", "result":  ""});
  }
});
3.2 數(shù)據(jù)的查詢

使用find方法

record.find((err, docs) => {
  if (err) {
    res.send({ "status": -1, "msg": "參數(shù)錯誤" });
  } else {
    res.send({ "status": 200, "msg": "查詢成功", "result":  docs});
  }
});
3.3 數(shù)據(jù)的更新

更新一條數(shù)據(jù):updateOne

/* 第一個參數(shù)為查詢參數(shù),第二個為要更新的內(nèi)容,第三個為回調(diào)方法 */
record.updateOne({_id: id}, updateInfo, (err, doc) => {
    if(err) {
      res.send({"status": -1, "msg": "更新失敗", "result": ""});
    } else {
      res.send({"status": 200, "msg": "更新成功", "result": ""});
    }
})

更新多條數(shù)據(jù):updateMany

record.updateMany({user_info: {$elemMatch: {user_id: userId, status: 1, is_delete: 1}}}, {$set: {"user_info.$.is_delete": 3}}, (err, doc) => {
    if(err) {
      res.send({"status": -1, "msg": "參數(shù)錯誤"});
    } else {
      res.send({"status": 200, "msg": "清空成功"});
    }
})
3.4 數(shù)據(jù)的刪除
/* 第一個為要刪除的內(nèi)容的參數(shù) */
record.findOneAndDelete({_id: req.body.id}, (err, doc) => {
    if(err) {
      res.send({"status": -1, "msg": "刪除失敗"});
    } else {
      res.send({"status": 200, "msg": "刪除成功"});
    }
})
4. 數(shù)據(jù)庫的分頁操作(limit和skip方法)

limit()方法為限制數(shù)據(jù)庫每次查詢的數(shù)據(jù)條數(shù);skip(param)跳過param條數(shù)據(jù)不查詢

/* page: 頁碼;pagesize: 每頁的數(shù)量 */
let page = req.body.page;
let pagesize = req.body.pagesize;
let queryResult = collection.find(queryCondition).limit(pageSize).skip((page - 1) * pageSize).sort({"_id": -1});
queryResult.exec((err, value) => {
  if(err) {
    reject(err);
  } else {
    resolve({total, value});
  }
})
5.匹配數(shù)據(jù)

匹配數(shù)據(jù)中的數(shù)組里的某個對象里的某個字段,使用$set來設(shè)置對應(yīng)的值

$set: {"user_info.$.status": 1}

$elemMath只匹配第一條數(shù)據(jù),當(dāng)數(shù)組里存在多條一樣的數(shù)據(jù)時,只返回第一條數(shù)據(jù)

let arr = [
    {
        is_delete: 1,
        name: "a"
    },
    {
        is_delete: 1,
        name: "b"
    }
]
{$elemMatch: {is_delete: 1}}只匹配arr的第一條數(shù)據(jù)

aggregate匹配多條數(shù)據(jù)

/* aggregate聚合操作,$unwind將數(shù)組拆分成單個元素
   * $group 分組依據(jù)
   * $sum 統(tǒng)計(jì)
   * $project 將返回值進(jìn)行篩選,是否返回篩選完后的某個字段
   * */
  message.aggregate([
    {
      $match: {
        "user_info.user_id": id,
        "user_info.is_delete": 0
      }
    },
    {
      $unwind: "$user_info"
    },
    {
      $group: {
        _id: {status: "$user_info.status",},
        count: {$sum: 1}
      }
    },
    {
      $project: {
        "_id": 0,
        "status": "$_id.status",
        "count": 1
      }
    }
  ]).then()

對于匹配數(shù)組里的某項(xiàng)中的某個字段

let arr = [
    {
        is_delete: 1,
        name: "a"
    },
    {
        is_delete: 1,
        name: "b"
    }
]
/* 匹配arr中的name */
$match: {
    "arr.name": "a"
}
/* 分組篩選 */
$ group: {
    _id: {name: "$arr.name"}
}

對對象中的數(shù)組進(jìn)行插入數(shù)據(jù)操作

let obj = {
    id: 1,
    arr: [
        {
            is_delete: 1,
            name: "a"
        },
        {
            is_delete: 1,
            name: "b"
        }
    ]
}
{"$push": {arr: {name: "c", is_delete: 0}}}
正在努力學(xué)習(xí)中,若對你的學(xué)習(xí)有幫助,留下你的印記唄(點(diǎn)個贊咯^_^)

往期好文推薦:

使用vue開發(fā)移動端管理后臺

實(shí)現(xiàn)單行及多行文字超出后加省略號

node之本地服務(wù)器圖片上傳

純css實(shí)現(xiàn)瀑布流(multi-column多列及flex布局)

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

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

相關(guān)文章

  • mongodb數(shù)據(jù)數(shù)據(jù)分頁

    摘要:在做自己的一個小項(xiàng)目時,新學(xué)習(xí)了非關(guān)系型數(shù)據(jù)庫,使用了封裝好的查詢方法,包括數(shù)據(jù)庫分頁用到的和方法,這里記錄下。 在做自己的一個小項(xiàng)目時,新學(xué)習(xí)了mongodb非關(guān)系型數(shù)據(jù)庫,使用了mongoose封裝好的查詢方法,包括數(shù)據(jù)庫分頁用到的limit和skip方法,這里記錄下。 1. mongodb數(shù)據(jù)庫連接 參照官網(wǎng)文檔對應(yīng)的參數(shù)如下: mongodb://[username:passw...

    APICloud 評論0 收藏0
  • VueCli+Node+mongodb打造個人博客(含前臺展示后臺管理系統(tǒng))(下)

    摘要:前文上篇中篇地址現(xiàn)在只剩下把東西展示出來了頁面這里有四種頁面其實(shí)是四個組件文章,雜談,收藏,具體的文章或雜談前三個雖然布局一樣,但功能有細(xì)微差別,同時考慮到以后可能要針對不同種類做不同的布局方法我還是定義了三個組件以及具體的那個可以看到它們 前文 上篇:https://segmentfault.com/a/11...中篇:https://segmentfault.com/a/11......

    YacaToy 評論0 收藏0
  • VueCli+Node+mongodb打造個人博客(含前臺展示后臺管理系統(tǒng))(下)

    摘要:前文上篇中篇地址現(xiàn)在只剩下把東西展示出來了頁面這里有四種頁面其實(shí)是四個組件文章,雜談,收藏,具體的文章或雜談前三個雖然布局一樣,但功能有細(xì)微差別,同時考慮到以后可能要針對不同種類做不同的布局方法我還是定義了三個組件以及具體的那個可以看到它們 前文 上篇:https://segmentfault.com/a/11...中篇:https://segmentfault.com/a/11......

    Atom 評論0 收藏0
  • VueCli+Node+mongodb打造個人博客(含前臺展示后臺管理系統(tǒng))(下)

    摘要:前文上篇中篇地址現(xiàn)在只剩下把東西展示出來了頁面這里有四種頁面其實(shí)是四個組件文章,雜談,收藏,具體的文章或雜談前三個雖然布局一樣,但功能有細(xì)微差別,同時考慮到以后可能要針對不同種類做不同的布局方法我還是定義了三個組件以及具體的那個可以看到它們 前文 上篇:https://segmentfault.com/a/11...中篇:https://segmentfault.com/a/11......

    EdwardUp 評論0 收藏0
  • VueCli+Node+mongodb打造個人博客(含前臺展示后臺管理系統(tǒng))(下)

    摘要:前文上篇中篇地址現(xiàn)在只剩下把東西展示出來了頁面這里有四種頁面其實(shí)是四個組件文章,雜談,收藏,具體的文章或雜談前三個雖然布局一樣,但功能有細(xì)微差別,同時考慮到以后可能要針對不同種類做不同的布局方法我還是定義了三個組件以及具體的那個可以看到它們 前文 上篇:https://segmentfault.com/a/11...中篇:https://segmentfault.com/a/11......

    liangdas 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<