Mongoose 對象文檔模型庫

一、介紹

Mongoose是一個對象文檔模型庫,官網:http://www.mongoosejs.net/

二、作用

方便使用代碼操作Mongodb數據庫

三、使用流程

//1. 安裝 mongoose
//2. 導入 mongoose
const mongoose = require('mongoose');
//3. 連接數據庫
mongoose.connect('mongodb://127.0.0.1:27017/bilibili');
//4. 設置連接回調
//連接成功
mongoose.connection.on('open', () => {console.log('連接成功');//5. 創建文檔結構對象let BookSchema = new mongoose.Schema({title: String,author: String,price: Number});//6. 創建文檔模型對象let BookModel = mongoose.model('book', BookSchema);//7. 插入文檔BookModel.create({title: '西游記',author: '吳承恩',price: 19.9}, (err, data) => {if (err) throw err;//輸出 data 對象console.log(data);//8. 斷開連接mongoose.disconnect();});
});
//連接出錯
mongoose.connection.on('error', () => {console.log('連接出錯~~');
})
//連接關閉
mongoose.connection.on('close', () => {console.log('連接關閉');
})

四、字段類型

類型描述
String字符串
Number數字
Boolean布爾值
Array數組,也可以使用 [] 來標識
Date日期
BufferBuffer 對象
Mixed任意類型,需要使用 mongoose.Schema.Types.Mixed 指定
ObjectId對象 ID,需要使用 mongoose.Schema.Types.ObjectId 指定
Decimal128高精度數字,需要使用 mongoose.Schema.Types.Decimal128 指定

五、字段驗證

Mongoose 有一些內建驗證器,可以對字段值進行驗證

5.1 必填項

title: {
type: String,
required: true // 設置必填項
}

5.2?默認值

author: {
type: String,
default: '匿名' //默認值
},

5.3 枚舉項

gender: {
type: String,
enum: ['男','女'] //設置的值必須是數組中的
},

5.5?唯一值

username: {
type: String,
unique: true
},

六、CURD

數據庫的基本操作包括四個,增加(create),刪除(delete),修改(update),查(read)

6.1?增加

插入一條

SongModel.create({title: '給我一首歌的時間',author: 'Jay'
}, function(err, data) {//錯誤console.log(err);//插入后的數據對象console.log(data);
});

插入多條

PhoneModel.insertMany([{brand: '華為',color: '灰色',price: 2399,tags: ['電量大', '屏幕大', '信號好']},{brand: '小米',color: '白色',price: 2099,tags: ['電量大', '屏幕大', '信號好']}
], (err, data) => {if (err) throw err;console.log('寫入成功');mongoose.connection.close();
})

6.2?刪除

刪除一條數據

SongModel.deleteOne({_id: '5dd65f32be6401035cb5b1ed'
}, function(err) {if (err) throw err;console.log('刪除成功');mongoose.connection.close();
});

刪除多條

SongModel.deleteMany({author: 'Jay'
}, function(err) {if (err) throw err;console.log('刪除成功');mongoose.connection.close();
});

6.3?更新

   //更新一條數據  第一個參數是需要更新的對象,第二個參數是要更新的字段BookModel.updateOne({name:'秋園'},{price:8}).then(res=>{console.log(res)})//更新多條BookModel.updateMany({author:'余華'},{is_hot:false}).then(res=>{console.log(res)})

6.4?查詢

SongModel.findOne({author: '王力宏'
}, function(err, data) {if (err) throw err;console.log(data);mongoose.connection.close();
});
//根據 id 查詢數據
SongModel.findById('5dd662b5381fc316b44ce167', function(err, data) {if (err) throw err;console.log(data);mongoose.connection.close();
});
//不加條件查詢
SongModel.find(function(err, data) {if (err) throw err;console.log(data);mongoose.connection.close();
});
//加條件查詢 第一個參數是查詢條件
SongModel.find({author: '王力宏'
}, function(err, data) {if (err) throw err;console.log(data);mongoose.connection.close();
});

七、條件控制

7.1?運算符

在 mongodb 不能 > < >= <= !== 等運算符,需要使用替代符號

  • > 使用 $gt
  • < 使用 $lt
  • >= 使用 $gte
  • <= 使用 $lte
  • !== 使用 $ne
db.students.find({id:{$gt:3}}); id號比3大的所有的記錄

?7.2?邏輯運算

$or 邏輯或的情況

//查找年齡為18或者24的學生
db.students.find({$or:[{age:18},{age:24}]}); 

$and 邏輯與的情況

//查找年齡大于15并且小于20的學生
db.students.find({$and: [{age: {$lt:20}}, {age: {$gt: 15}}]});

7.3?正則匹配

條件中可以直接使用 JS 的正則語法,通過正則可以進行模糊查詢

db.students.find({name:/imissyou/});

八、個性化讀取

8.1?字段篩選

//0:不要的字段
//1:要的字段
SongModel.find().select({_id: 0,title: 1
}).exec(function(err, data) {if (err) throw err;console.log(data);mongoose.connection.close();
});

8.2?數據排序

//sort 排序
//1:升序
//-1:倒序
SongModel.find().sort({hot: 1
}).exec(function(err, data) {if (err) throw err;console.log(data);mongoose.connection.close();
});

8.3?數據截取

//skip 跳過 limit 限定
SongModel.find().skip(10).limit(10).exec(function(err, data) {if (err) throw err;console.log(data);mongoose.connection.close();
});

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/214973.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/214973.shtml
英文地址,請注明出處:http://en.pswp.cn/news/214973.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

某省資源交易中心 (js逆向)

該文章只是用于逆向學習&#xff0c;不得以商用或者是破壞他人利益的目的進行使用。如有侵權請聯系作者。 網站鏈接&#xff1a; bse64 aHR0cHM6Ly9nZ3p5ZncuZnVqaWFuLmdvdi5jbi9idXNpbmVzcy9saXN0Lw 分析環節 進入網站 進行翻頁請求時我們會發現改請求時ajax請求。 這里&…

hive-窗口函數

1 窗口函數語法 分析函數/專用窗口函數 over(partition by 列名 order by 列名 rows between 開始位置 and 結束位置) 常用的分析函數 常用的分析函數&#xff1a;sum()、max()、min()、avg()、count() 常用的專用窗口函數 專用窗口函數&#xff1a;row_number()、rank()、dens…

【簡易版】Linux下Protobuf 實現網絡版通訊錄--C++

一、介紹 該項目的主要目的是用于熟悉protobuf的使用&#xff0c;體驗數據在網絡中序列化反序列化的形式&#xff0c;并非一個完整的項目。 該通訊錄只實現了增加聯系人的功能。服務器端接收到請求后會將聯系人的信息打印。 二、環境搭建 使用Httplib庫&#xff0c;可以快速…

jsp文件引用的css修改后刷新不生效問題

問題 在對 JavaWeb 項目修改的過程中&#xff0c;發現修改了 jsp 文件引入的 css 文件的代碼后頁面的樣式沒有更新的問題。 原因 導致這個問題的原因可能是因為瀏覽器緩存的問題。 解決方法 下面介紹兩種解決方法&#xff0c;供大家參考&#xff1a; 1、給 link 標簽的 c…

TrustZone之安全虛擬化

在Armv7-A首次引入虛擬化時,它僅在非安全狀態中添加。在Armv8.3之前,Armv8也是如此,如下圖所示: 如前所述在切換安全狀態時,EL3用于托管固件和安全監視器。安全EL0/1托管受信任的執行環境(TEE),由受信任的服務和內核組成。 在安全狀態下,沒有對多個虛擬機的需…

Java基礎——什么是main方法

main方法是Java虛擬機調用的入口&#xff0c;該方法的權限必須是public&#xff0c;Java虛擬機在執行main方法時不必創建對象&#xff0c;所以該方法是static修飾&#xff0c;接收一個String類型的數組參數&#xff0c;數組保存執行Java命令時傳遞給所運行的類的參數&#xff0…

基于微信小程序和Spring、SpringMVC、MyBatis的汽車租賃管理系統

文章目錄 項目介紹主要功能截圖:部分代碼展示設計總結項目獲取方式?? 作者主頁:超級無敵暴龍戰士塔塔開 ?? 簡介:Java領域優質創作者??、 簡歷模板、學習資料、面試題庫【關注我,都給你】 ??文末獲取源碼聯系?? 項目介紹 基于微信小程序和Spring、SpringMVC、My…

Kafka生產問題總結及性能優化實踐

1、消息丟失情況 消息發送端&#xff1a; &#xff08;1&#xff09;acks0&#xff1a; 表示producer不需要等待任何broker確認收到消息的回復&#xff0c;就可以繼續發送下一條消息。性能最高&#xff0c;但是最容易丟消息。大數據統計報表場景&#xff0c;對性能要求很高&am…

JavaCV之rtmp推流(FLV和M3U8)

JavaCV與FFmpeg FFmpeg是一款開源的多媒體處理工具集&#xff0c;它包含了一系列用于處理音頻、視頻、字幕等多媒體數據的庫和工具。 JavaCV集成了FFmpeg庫&#xff0c;使得Java開發者可以使用FFmpeg的功能&#xff0c;比如視頻解碼、編碼、格式轉換等。 除了FFmpeg&#xff0…

LeetCode力扣每日一題(Java):35、搜索插入位置

一、題目 二、解題思路 1、我的思路&#xff08;又稱&#xff1a;論API的重要性&#xff09; 讀完題目之后&#xff0c;我心想這題目怎么看著這么眼熟&#xff1f;好像我之前學過的一個API呀&#xff01; 于是我回去翻了翻我之前寫的博客&#xff1a;小白備戰藍橋杯&#xf…

通用的AGI 安全風險

傳統安全風險 平臺基礎設施安全風險 模型與數據層安全風險 應用層安全風險 平臺基礎設施安全風險 &#xff08;1&#xff09;物理攻擊&#xff1a;機房管控不到位 &#xff08;2&#xff09;網絡攻擊 &#xff08;3&#xff09;計算環境&#xff1a;自身安全漏洞&#xf…

編輯器Sublime text 常用快捷命令 列模式 替換空行

平替notepad 下載可取官網 www.sublimetext.com 據說可以無限試用&#xff0c;沒有功能限制 1、快速刪除空行 ctrl h選擇正則表達式 .*Find輸入&#xff1a; ^(\t)*$\nReplace輸入&#xff1a;點擊Replace All 2、快速選擇指定字符 用鼠標選中alt f3修改 3、列編輯模式 ct…

如何理解HTML下的網頁結構?

HTML&#xff08;Hypertext Markup Language&#xff09;是一種標記語言&#xff0c;用于描述網頁的結構和內容。以下是對網頁結構的理解以及網絡爬蟲在處理不同類型網頁時可能遇到的情況&#xff1a; 1. HTML基本結構 HTML文檔的基本結構通常包括以下幾個部分&#xff1a; …

宇視科技視頻監控 main-cgi 文件信息泄露漏洞復現

0x01 產品簡介 宇視(Uniview)高清網絡攝像機是一種高性能的網絡攝像機,它可以通過網絡進行視頻傳輸和監控。該攝像機采用先進的視頻技術,具有高清晰度、低照度、寬動態等特點,能夠提供高質量的視頻圖像。 0x02 漏洞概述 宇視(Uniview)高清網絡攝像機存在信息泄露漏洞…

ppt編輯密碼如何設置?

大家在PPT中設置了限制編輯&#xff0c;發現后面任然可以編輯文件。那么如何將PPT文件設置成禁止修改模式呢&#xff1f;今天分享幾個方法給大家。 方法一 將PPT文件直接保存或者另存為一份文件&#xff0c;在保存時&#xff0c;將文件格式選擇為PowerPoint圖片演示文稿 方法…

.NET 8 編寫 LiteDB vs SQLite 數據庫 CRUD 接口性能測試(測試篇)

WebAppDbTest 項目測試 測試工具 ltt介紹安裝使用方式1、Drill2、Hammer3、Nailgun 測試主機規格配置CRUD 性能測試對比1、ltt 工具測試1.1、AddSingle 單條數據添加1.2、AddBulk 批量數據&#xff08;1000&#xff09;條添加1.3、GetSingle 單條數據查詢1.4、GetAll 多條&…

Spring Boot使用JUnit和Mockito進行Service層單元測試

文章目錄 前言一、單元測試是什么二、為什么要寫單元測試三、簡單示例假設我們有一個簡單的UserService類&#xff0c;其中包含了一些用戶相關的邏輯&#xff1a;首先&#xff0c;我們需要引入JUnit和Mockito的依賴。在Maven項目中&#xff0c;可以在pom.xml文件中添加以下依賴…

多合一iPhone 解鎖工具:iMyFone LockWiper iOS

多合一iPhone 解鎖工具 無需密碼解鎖 iPhone/iPad/iPod touch 上所有類型的屏幕鎖定 在幾分鐘內解鎖 iPhone Apple ID、Touch ID 和 Face ID 立即繞過 MDM 并刪除 iPhone/iPad/iPod touch 上的 MDM 配置文件 支持所有 iOS 版本和設備&#xff0c;包括最新的 iOS 17 和 iPhone 1…

SQL語句---查詢數據

介紹 使用sql語句查詢數據。 命令 select 字段1,字段2 from 表名;例子 查詢指定字段&#xff1a; select id,name from a;使用*查詢所有字段&#xff1a; select * from a;

JAVA實操經驗

零&#xff1a; 按照需要&#xff0c;可以使用需要某個類下&#xff08;主要是java提供的&#xff09;的方法來實現某個功能。&#xff08;主要是用在不同類下的方法會進行重寫功能不同&#xff09; 方法和構造方法不同&#xff1a;方法是方法&#xff0c;構造方法是構造器&a…