摘要:是在環境下對進行便捷操作的對象模型工具安裝一開始需要安裝環境以及數據庫,然后創建數據文件夾并且啟動安裝啟動。出錯返回符合條件的文檔數。修改后的標題同上取反,刪除一個字段執行后字段不存在增減修改器,只對數字有效。
Mongoose是在node.js環境下對mongodb進行便捷操作的對象模型工具安裝
一開始需要安裝node.js環境以及mongodb數據庫,然后創建mongdb數據文件夾并且啟動mongdb(windows安裝啟動mongodb)。
connectconnect 用于連接數據庫
mongoose.connect(uri(s), [options], [callback]) //url(s):數據庫地址,可以是多個,以`,`隔開 //options:可選,配置參數 //callback:可選,回調 // 規則 mongoose.connect("mongodb://數據庫地址(包括端口號)/數據庫名稱") // 連接mongodb示例 mongoose.connect("mongodb://localhost:27017/db"); //連接本地默認27017端口的mongodb //連接指定用戶連接示例 mongoose.connect("mongodb://用戶名:密碼@127.0.0.1:27017/數據庫名稱") //連接多個數據庫示例 //如果你的app中要連接多個數據庫,只需要設置多個url以,隔開,同時設置mongos為true mongoose.connect("urlA,urlB,...", { mongos : true })創建schema & model schema
schema可以理解為mongoose對表結構的定義(不僅僅可以定義文檔的結構和屬性,還可以定義文檔的實例方法、靜態模型方法、復合索引等),每個schema會映射到mongodb中的一個collection,schema不具備操作數據庫的能力
const mongoose = require("mongoose"); const {Schema} = mongoose; // 用戶對象模型 const userSchema = new Schema({ name: { type: String, //類型 default: Date.now // 默認值 }, 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
ModelModel是由Schema編譯而成的假想(fancy)構造器,具有抽象屬性和行為。Model的每一個實例(instance)就是一個document。document可以保存到數據庫和對數據庫進行操作。
//創建并導出model const db= { User: mongoose.model("MUser", muserSchema), }; module.exports = db;
現在我們就完成了mongodb的數據連接,數據對象模型的創建。
操作mongodb數據庫引入之前導出的模型mongodb數據const db = require("../models/db")
mongodb查詢 1.findfind用來查詢并輸出該條件下的所有文檔
db.Userl.find({conditions}, {options}, callback)
conditions Object類型 //查詢條件
options Object 類型 //查詢配置參數
callback Function //回調
// 查詢Article模型下所有數據 db.Article.find({}, function(err, docs){ if (err) { console.log("出錯"+ err); return; } res.json(docs); // 以json格式輸出 }); // 查詢Article模型下state字段為"publish"的內容,并且不輸出articleContent和user字段內容。注!(1為只輸出該字段,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}); }) // 復雜條件查詢 //$ro 查詢該模型下的title字段或者tag字段,$regex 為正則匹配實現模糊查詢,$options為不區分大小寫 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 --------------- 或關系
$nor ------------- 或關系取反
$gt --------------- 大于
$gte -------------- 大于等于
$lt ---------------- 小于
$lte --------------- 小于等于
$ne --------------- 不等于
$in ---------------- 在多個值范圍內
$nin -------------- 不在多個值范圍內
$all --------------- 匹配數組中多個值
$regex ----------- 正則,用于模糊查詢
$size ------------- 匹配數組大小
$maxDistance -- 范圍查詢,距離(基于LBS)
$mod ------------ 取模運算
$near ------------ 鄰域查詢,查詢附近的位置(基于LBS)
$exists ---------- 字段是否存在
$elemMatch --- 匹配內數組內的元素
$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 作為參數,返回單個文檔。_id 可以是字符串或 ObjectId 對象。
db.Article.findOne(id, function(err, docs){ if (err) { console.log("出錯"+ err); } res.json(docs); })4.count
返回符合條件的文檔數。
db.Article.count(id, function(err, docs){ if (err) { console.log("出錯"+ err); } res.json(docs); })5.where
當查詢比較復雜時,用 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 是一種快捷方式,并支持鏈式調用查詢。
db.MUser.$where("this.firstname === this.lastname").exec((err, docs) => { res.json({docs}); });sort & skip & limit
sort為排序方法,為該字段正序或者倒序輸出內容(-1為倒序)
skip為跳過多少條目
limit 為限制輸出多少條
// 實現文章分頁,按時間倒序排列輸出 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為你創建的文檔對象模型里的字段,需正確對應傳入 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
刪除數據方法
db.Course.remove({_id: req.body.id}, function(err, docs){ if (err) { res.status(500).send(); return } res.json({statu: 200}) })mongodbg更新 update
更新數據方法
// 更新指定email字段數據條目下字段為content的內容,如果不存在就創建該字段 db.Share.update({email: email},{$set:{content: newarr}}, function(err, docs){ if (err) { res.status(500).send(); return } res.json({statu: 200}); }) //$set 指定字段的值,這個字段不存在就創建它。可以是任何MondoDB支持的類型。 Article.update({_id : id}, {$set : {views : 51, title : ‘修改后的標題’ …}}) //$unset 同上取反,刪除一個字段 Article.update({views : 50}, {$unset : {views : ‘remove’}}) //執行后: views字段不存在 //$inc 增減修改器,只對數字有效。 Article.update({_id : id}, {$inc : {views : 1}}) //$push 為字段為數組的內容push數據 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 指定字段的值,這個字段不存在就創建它。可以是任何MondoDB支持的類型。
Article.update({_id : id}, {$set : {views : 51, title : "修改后的標題" ...}})
$unset 同上取反,刪除一個字段
Article.update({views : 50}, {$unset : {views : "remove"}})
//執行后: views字段不存在
$inc 增減修改器,只對數字有效。
Article.update({_id : id}, {$inc : {views : 1}})
$push 為字段為數組的內容push數據
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”}}})
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/19267.html
摘要:前言學習前端也有一段時間了做個個人博客網站吧正好總結練習一下這段時間的所學文章很長,會拆成三篇來講項目地址效果后臺管理系統前端頁面架構可以看到,在整個項目中,沒有頁面的跳轉只有前后端的數據交換,所有的頁面更新都是組件更新和數據更新后端只對數 前言 學習前端也有一段時間了做個個人博客網站吧正好總結練習一下這段時間的所學文章很長,會拆成三篇來講 項目github地址:https://git...
摘要:前言學習前端也有一段時間了做個個人博客網站吧正好總結練習一下這段時間的所學文章很長,會拆成三篇來講項目地址效果后臺管理系統前端頁面架構可以看到,在整個項目中,沒有頁面的跳轉只有前后端的數據交換,所有的頁面更新都是組件更新和數據更新后端只對數 前言 學習前端也有一段時間了做個個人博客網站吧正好總結練習一下這段時間的所學文章很長,會拆成三篇來講 項目github地址:https://git...
摘要:前言學習前端也有一段時間了做個個人博客網站吧正好總結練習一下這段時間的所學文章很長,會拆成三篇來講項目地址效果后臺管理系統前端頁面架構可以看到,在整個項目中,沒有頁面的跳轉只有前后端的數據交換,所有的頁面更新都是組件更新和數據更新后端只對數 前言 學習前端也有一段時間了做個個人博客網站吧正好總結練習一下這段時間的所學文章很長,會拆成三篇來講 項目github地址:https://git...
摘要:前言學習前端也有一段時間了做個個人博客網站吧正好總結練習一下這段時間的所學文章很長,會拆成三篇來講項目地址效果后臺管理系統前端頁面架構可以看到,在整個項目中,沒有頁面的跳轉只有前后端的數據交換,所有的頁面更新都是組件更新和數據更新后端只對數 前言 學習前端也有一段時間了做個個人博客網站吧正好總結練習一下這段時間的所學文章很長,會拆成三篇來講 項目github地址:https://git...
閱讀 1618·2019-08-29 13:53
閱讀 3216·2019-08-29 13:50
閱讀 860·2019-08-27 10:51
閱讀 571·2019-08-26 18:36
閱讀 1811·2019-08-26 11:00
閱讀 610·2019-08-26 10:36
閱讀 3222·2019-08-23 17:58
閱讀 2037·2019-08-23 15:17