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

資訊專欄INFORMATION COLUMN

在node中的mongodb及mongoose常見用法

liuhh / 1458人閱讀

摘要:是在環(huán)境下對進行便捷操作的對象模型工具安裝一開始需要安裝環(huán)境以及數(shù)據(jù)庫,然后創(chuàng)建數(shù)據(jù)文件夾并且啟動安裝啟動。出錯返回符合條件的文檔數(shù)。修改后的標(biāo)題同上取反,刪除一個字段執(zhí)行后字段不存在增減修改器,只對數(shù)字有效。

Mongoose是在node.js環(huán)境下對mongodb進行便捷操作的對象模型工具
安裝

一開始需要安裝node.js環(huán)境以及mongodb數(shù)據(jù)庫,然后創(chuàng)建mongdb數(shù)據(jù)文件夾并且啟動mongdb(windows安裝啟動mongodb)。

connect

connect 用于連接數(shù)據(jù)庫

mongoose.connect(uri(s), [options], [callback])
//url(s):數(shù)據(jù)庫地址,可以是多個,以`,`隔開
//options:可選,配置參數(shù)
//callback:可選,回調(diào)

// 規(guī)則
mongoose.connect("mongodb://數(shù)據(jù)庫地址(包括端口號)/數(shù)據(jù)庫名稱")
// 連接mongodb示例
mongoose.connect("mongodb://localhost:27017/db");  //連接本地默認(rèn)27017端口的mongodb
//連接指定用戶連接示例
mongoose.connect("mongodb://用戶名:密碼@127.0.0.1:27017/數(shù)據(jù)庫名稱")
//連接多個數(shù)據(jù)庫示例
//如果你的app中要連接多個數(shù)據(jù)庫,只需要設(shè)置多個url以,隔開,同時設(shè)置mongos為true
mongoose.connect("urlA,urlB,...", {
   mongos : true
})
創(chuàng)建schema & model schema

schema可以理解為mongoose對表結(jié)構(gòu)的定義(不僅僅可以定義文檔的結(jié)構(gòu)和屬性,還可以定義文檔的實例方法、靜態(tài)模型方法、復(fù)合索引等),每個schema會映射到mongodb中的一個collection,schema不具備操作數(shù)據(jù)庫的能力

const mongoose = require("mongoose");

const {Schema} = mongoose;
//  用戶對象模型
const userSchema = new Schema({
  name: {
    type: String, //類型
    default: Date.now // 默認(rèn)值
  },
  avatar: {
        type: String,
        required: true //必須有值
  },
  user: String, 
  passworld: String,
  hash: String, 
  score: Number, 
  learn: Array, 
  message: Array, 
  star: Array, 
  sign: Array,
  signdate: String, 
  isregister: Boolean, 
});

schema字段類型

String

Number

Date

Buffer

Boolean

Mixed

ObjectId

Array

Model

Model是由Schema編譯而成的假想(fancy)構(gòu)造器,具有抽象屬性和行為。Model的每一個實例(instance)就是一個document。document可以保存到數(shù)據(jù)庫和對數(shù)據(jù)庫進行操作。

//創(chuàng)建并導(dǎo)出model
const db= {
  User: mongoose.model("MUser", muserSchema),
};
module.exports = db;

現(xiàn)在我們就完成了mongodb的數(shù)據(jù)連接,數(shù)據(jù)對象模型的創(chuàng)建。

操作mongodb數(shù)據(jù)庫

引入之前導(dǎo)出的模型mongodb數(shù)據(jù)const db = require("../models/db")

mongodb查詢 1.find

find用來查詢并輸出該條件下的所有文檔
db.Userl.find({conditions}, {options}, callback)
conditions Object類型 //查詢條件
options Object 類型 //查詢配置參數(shù)
callback Function //回調(diào)

查詢操作示例
// 查詢Article模型下所有數(shù)據(jù)
db.Article.find({}, function(err, docs){
    if (err) {
            console.log("出錯"+ err);
            return;
    }
    res.json(docs); // 以json格式輸出
});

// 查詢Article模型下state字段為"publish"的內(nèi)容,并且不輸出articleContent和user字段內(nèi)容。注?。?為只輸出該字段,0為不輸出該字段)
db.Article.find({state: "publish"}, {articleContent: 0,user: 0}, function(err, docs){
    if (err) {
            console.log("出錯"+ err);
            return;
    }
    res.json(docs);
});
//查詢閱讀量大于500小于600的文章
db.Article.find(({views: {$gte: 500, $lte: 600}}), function(err, docs){
    if (err) {
            console.log("出錯"+ err);
            return;
    }
    res.json({data:docs});
}) 
// 復(fù)雜條件查詢
//$ro 查詢該模型下的title字段或者tag字段,$regex 為正則匹配實現(xiàn)模糊查詢,$options為不區(qū)分大小寫
db.Article.find({ $or: [{title: {$regex: searchval, $options:"i"} }, { tag: {$regex: searchval, $options:"i" }}] }}, function(err, docs){
    if (err) {
            console.log("出錯"+ err);
            return;
    }
    res.json({data:docs});
})
條件查詢

$or --------------- 或關(guān)系

$nor ------------- 或關(guān)系取反

$gt --------------- 大于

$gte -------------- 大于等于

$lt ---------------- 小于

$lte --------------- 小于等于

$ne --------------- 不等于

$in ---------------- 在多個值范圍內(nèi)

$nin -------------- 不在多個值范圍內(nèi)

$all --------------- 匹配數(shù)組中多個值

$regex ----------- 正則,用于模糊查詢

$size ------------- 匹配數(shù)組大小

$maxDistance -- 范圍查詢,距離(基于LBS)

$mod ------------ 取模運算

$near ------------ 鄰域查詢,查詢附近的位置(基于LBS)

$exists ---------- 字段是否存在

$elemMatch --- 匹配內(nèi)數(shù)組內(nèi)的元素

$within ---------- 范圍查詢(基于LBS)

$box ------------- 范圍查詢,矩形范圍(基于LBS)

$center ---------- 范圍醒詢,圓形范圍(基于LBS)

$centerSphere - 范圍查詢,球形范圍(基于LBS)

$slice ------------- 查詢字段集合中的元素(比如從第幾個之后,第N到第M個元素

2.findOne

與find類似,但只返回單個文檔

db.Article.findOne({title: req.body.title}, function(err, docs){
    if (err) {
        console.log("出錯"+ err);
    }
    res.json(docs);
})
3.findById

與findOne類似,但它接收文檔的 _id 作為參數(shù),返回單個文檔。_id 可以是字符串或 ObjectId 對象。

db.Article.findOne(id, function(err, docs){
    if (err) {
        console.log("出錯"+ err);
    }
    res.json(docs);
})
4.count

返回符合條件的文檔數(shù)。

db.Article.count(id, function(err, docs){
    if (err) {
        console.log("出錯"+ err);
    }
    res.json(docs);
})
5.where

當(dāng)查詢比較復(fù)雜時,用 where:

db.Article.where("age").gte(25)
.where("tags").in(["movie", "music", "art"])
.select("name", "age", "tags")
.skip(20)
.limit(10)
.asc("age")
.slaveOk()
.hint({ age: 1, name: 1 })
.run(function(err, docs){
    if (err) {
        console.log("出錯"+ err);
    }
    res.json(docs);
}));
$where

有時我們需要在 mongodb 中使用 javascript 表達式進行查詢,這時可以用 find({$where : javascript}) 方式,$where 是一種快捷方式,并支持鏈?zhǔn)秸{(diào)用查詢。

db.MUser.$where("this.firstname === this.lastname").exec((err, docs) => {
    res.json({docs});
});
sort & skip & limit

sort為排序方法,為該字段正序或者倒序輸出內(nèi)容(-1為倒序)
skip為跳過多少條目
limit 為限制輸出多少條

// 實現(xiàn)文章分頁,按時間倒序排列輸出
db.Article.find({tag:req.params.labe}, function(err, docs){
    if (err)return;
    res.json(docs)
}).sort({date:-1}).skip(page*pagenum).limit(pagenum)
mongodb增加

save是一個實例方法,使用時需要先 new Model() 來實例化

//保存一個用戶信息,userobj為你創(chuàng)建的文檔對象模型里的字段,需正確對應(yīng)傳入
const userobj={
    email: query,
    passworld: req.body.passworld,
    hash: hash,
    isregister: false,
    score: 5,
    sign: [],
    signdate: ""
}
new db.MUser(userobj).save(function(error){
    if (error) {
        res.status(500).send()
        return
    }
    res.json({statu: 200})
})
mongodb刪除 remove

刪除數(shù)據(jù)方法

db.Course.remove({_id: req.body.id}, function(err, docs){
    if (err) {
            res.status(500).send();
            return
    }
    res.json({statu: 200})
})
mongodbg更新 update

更新數(shù)據(jù)方法

// 更新指定email字段數(shù)據(jù)條目下字段為content的內(nèi)容,如果不存在就創(chuàng)建該字段
db.Share.update({email: email},{$set:{content: newarr}}, function(err, docs){
    if (err) {
            res.status(500).send();
            return
    }
    res.json({statu: 200});
})

//$set 指定字段的值,這個字段不存在就創(chuàng)建它??梢允侨魏蜯ondoDB支持的類型。
Article.update({_id : id}, {$set : {views : 51, title : ‘修改后的標(biāo)題’ …}})

//$unset 同上取反,刪除一個字段
Article.update({views : 50}, {$unset : {views : ‘remove’}})
//執(zhí)行后: views字段不存在

//$inc 增減修改器,只對數(shù)字有效。
Article.update({_id : id}, {$inc : {views : 1}})

//$push 為字段為數(shù)組的內(nèi)容push數(shù)據(jù)
Article.update({_id : id}, {$push : {message : messageobj}})

//$pop從頭部或尾部刪除單個元素(1為從后面刪除,-1為從前面刪除)
db.Article.update(({_id: id), {$pop:{relationships: -1})

//__$pull__刪除滿足條件的元素,不止刪除一個
db.Article.update(({_id: id), {$pull:{“relationships”:{“fname”:”dongren”, ”lname”: ”zeng”}}})

$set 指定字段的值,這個字段不存在就創(chuàng)建它??梢允侨魏蜯ondoDB支持的類型。

Article.update({_id : id}, {$set : {views : 51, title : "修改后的標(biāo)題" ...}})

$unset 同上取反,刪除一個字段

Article.update({views : 50}, {$unset : {views : "remove"}})
//執(zhí)行后: views字段不存在

$inc 增減修改器,只對數(shù)字有效。

Article.update({_id : id}, {$inc : {views : 1}})

$push 為字段為數(shù)組的內(nèi)容push數(shù)據(jù)

Article.update({_id : id}, {$push : {message : messageobj}})

$pop 從頭部或尾部刪除單個元素(1為從后面刪除,-1為從前面刪除)

db.Article.update(({_id: id), {$pop:{relationships: -1})

$pull 刪除滿足條件的元素,不止刪除一個

db.Article.update(({_id: id), {$pull:{“relationships”:{“fname”:”dongren”, ”lname”: ”zeng”}}})

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

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

相關(guān)文章

  • VueCli+Node+mongodb打造個人博客(含前臺展示后臺管理系統(tǒng))(上)

    摘要:前言學(xué)習(xí)前端也有一段時間了做個個人博客網(wǎng)站吧正好總結(jié)練習(xí)一下這段時間的所學(xué)文章很長,會拆成三篇來講項目地址效果后臺管理系統(tǒng)前端頁面架構(gòu)可以看到,在整個項目中,沒有頁面的跳轉(zhuǎn)只有前后端的數(shù)據(jù)交換,所有的頁面更新都是組件更新和數(shù)據(jù)更新后端只對數(shù) 前言 學(xué)習(xí)前端也有一段時間了做個個人博客網(wǎng)站吧正好總結(jié)練習(xí)一下這段時間的所學(xué)文章很長,會拆成三篇來講 項目github地址:https://git...

    不知名網(wǎng)友 評論0 收藏0
  • VueCli+Node+mongodb打造個人博客(含前臺展示后臺管理系統(tǒng))(上)

    摘要:前言學(xué)習(xí)前端也有一段時間了做個個人博客網(wǎng)站吧正好總結(jié)練習(xí)一下這段時間的所學(xué)文章很長,會拆成三篇來講項目地址效果后臺管理系統(tǒng)前端頁面架構(gòu)可以看到,在整個項目中,沒有頁面的跳轉(zhuǎn)只有前后端的數(shù)據(jù)交換,所有的頁面更新都是組件更新和數(shù)據(jù)更新后端只對數(shù) 前言 學(xué)習(xí)前端也有一段時間了做個個人博客網(wǎng)站吧正好總結(jié)練習(xí)一下這段時間的所學(xué)文章很長,會拆成三篇來講 項目github地址:https://git...

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

    摘要:前言學(xué)習(xí)前端也有一段時間了做個個人博客網(wǎng)站吧正好總結(jié)練習(xí)一下這段時間的所學(xué)文章很長,會拆成三篇來講項目地址效果后臺管理系統(tǒng)前端頁面架構(gòu)可以看到,在整個項目中,沒有頁面的跳轉(zhuǎn)只有前后端的數(shù)據(jù)交換,所有的頁面更新都是組件更新和數(shù)據(jù)更新后端只對數(shù) 前言 學(xué)習(xí)前端也有一段時間了做個個人博客網(wǎng)站吧正好總結(jié)練習(xí)一下這段時間的所學(xué)文章很長,會拆成三篇來講 項目github地址:https://git...

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

    摘要:前言學(xué)習(xí)前端也有一段時間了做個個人博客網(wǎng)站吧正好總結(jié)練習(xí)一下這段時間的所學(xué)文章很長,會拆成三篇來講項目地址效果后臺管理系統(tǒng)前端頁面架構(gòu)可以看到,在整個項目中,沒有頁面的跳轉(zhuǎn)只有前后端的數(shù)據(jù)交換,所有的頁面更新都是組件更新和數(shù)據(jù)更新后端只對數(shù) 前言 學(xué)習(xí)前端也有一段時間了做個個人博客網(wǎng)站吧正好總結(jié)練習(xí)一下這段時間的所學(xué)文章很長,會拆成三篇來講 項目github地址:https://git...

    xcold 評論0 收藏0

發(fā)表評論

0條評論

liuhh

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<