摘要:如果不存在則創(chuàng)建新記錄。如果值為,執(zhí)行驗(yàn)證。如果選項(xiàng)為,在新建時(shí)插入文檔定義的默認(rèn)值。以模式進(jìn)行更新。禁用模式,允許覆蓋記錄示例更新多個(gè)為的文檔將設(shè)置為更新多條數(shù)據(jù)與相同更新一條數(shù)據(jù)設(shè)置無效查找查詢條件控制返回的字段控制選項(xiàng)回調(diào)函數(shù)。
在使用node.js時(shí),時(shí)常與之搭配的是mongoDB,一般我們不寫原生mongo語法,一個(gè)經(jīng)常使用的mongo庫便是mongoose,由于個(gè)人記性比較差,用過就忘了,因此便記錄一下常用增刪改查api.
安裝mongoDB安裝文檔: mongoDB安裝
我是mac平臺(tái) 用的是brew安裝
更新 brew (官網(wǎng)上是這么寫的 其實(shí)大可不必,直接跳過到第二步,會(huì)默認(rèn)幫你更新)
brew update
brew install mongodb
其實(shí)到這里 就已經(jīng)安裝完了 并且可以啟動(dòng)了
輸入 表示啟動(dòng)服務(wù)
mongod --config /usr/local/etc/mongod.conf
新起一個(gè)窗口啟動(dòng)
mongo
但是每次這樣啟動(dòng)也很麻煩 我們配置一下
創(chuàng)建數(shù)據(jù)目錄
sudo mkdir -p /data/db
進(jìn)入安裝目錄
cd /usr/local/Cellar/mongodb/<這里是你安裝時(shí)的版本號(hào)對(duì)應(yīng)文件夾>/bin
運(yùn)行mongodb
mongod
添加環(huán)境變量
export PATH=<安裝路徑>/bin:$PATH
把 <安裝路徑> 替換成你的, 比如我的 /usr/local/Cellar/mongodb/<這里是你安裝時(shí)的版本號(hào)對(duì)應(yīng)文件夾> , 其實(shí)和上面的路徑對(duì)應(yīng)
搞定
輸入 mongod 另起窗口輸入 mongo
可視化工具官網(wǎng) robomongo
我個(gè)人使用的是robomongo 當(dāng)然還有特別多優(yōu)秀的客戶端,根據(jù)個(gè)人喜好選擇
mongoose官網(wǎng)
其實(shí)大部分都在官網(wǎng)寫的十分詳細(xì),以備不時(shí)之需可以查閱
使用const mongoose = require("mongoose") // 可用于監(jiān)測數(shù)據(jù)庫狀態(tài) const db = mongoose.connection // 連接數(shù)據(jù)庫 test 表 如果不存在也沒關(guān)系 mongoose.connect("mongodb://localhost/test", { useMongoClient: true }); // 用于解決警告 mongoose.Promise = global.Promise;
解釋:
{ useMongoClient: true } 用于解決如下警告
創(chuàng)建 Schema(node:2772) DeprecationWarning: open() is deprecated in mongoose >= 4.11.0, use openUri() instead, or set the useMongoClient option if using connect() or createConnection(). See http://mongoosejs.com/docs/co...
詳見 Schema
const Schema = mongoose.Schema; // 定義表模型的數(shù)據(jù)類型 // required 必須的 接收一個(gè) boolean 或者 function const blogSchema = new Schema({ title: {type: String, required: true}, author: String, age: { type: Number, min: 18, max: 65 }, comments: [{ body: String, date: Date }], date: { type: Date, default: Date.now },// default 默認(rèn)當(dāng)前時(shí)間戳 hidden: Boolean, meta: { votes: Number, favs: Number } });
支持的類型
String
Number
Date
Buffer
Boolean
Mixed
ObjectId
Array
創(chuàng)建modelvar Blog = mongoose.model("Blog", blogSchema);
注: 文檔中在聲明方法的時(shí)候不要使用箭頭函數(shù)
創(chuàng)建文檔通過上面的步驟其實(shí)已經(jīng)創(chuàng)建了表模型 創(chuàng)建一個(gè)文檔并保存到數(shù)據(jù)庫非常簡單
增刪改查 增加方法一:
var Tank = mongoose.model("Tank", yourSchema); var small = new Tank({ size: "small" }); small.save(function (err, doc) { if (err) return handleError(err); console.log(doc) })
create: Model.create(doc(s), [callback])
Tank.create({ size: "small" }, function (err, small) { if (err) return handleError(err); console.log(small._doc) })
Model.insertMany(doc(s), [options], [options.ordered, [options.rawResult, [callback])
這一方法比循環(huán)create快 因?yàn)樗幌蚍?wù)器發(fā)送一個(gè)操作
var arr = [{ name: "Star Wars" }, { name: "The Empire Strikes Back" }]; Movies.insertMany(arr, function(error, docs) {});刪除
Tank.remove({ size: "large" }, function (err) { if (err) return handleError(err); });
刪除 Tank 表中 size 為 large 的數(shù)據(jù)
改(更新)update: Model.update(conditions, doc, [options], [callback])
參數(shù)
conditions
注: 不能修改主鍵 _id
options 有如下選項(xiàng):
safe (boolean): 默認(rèn)為true。安全模式。
upsert (boolean): 默認(rèn)為false。如果不存在則創(chuàng)建新記錄。
multi (boolean): 默認(rèn)為false。是否更新多個(gè)查詢記錄。
runValidators: 如果值為true,執(zhí)行Validation驗(yàn)證。
setDefaultsOnInsert: 如果upsert選項(xiàng)為true,在新建時(shí)插入文檔定義的默認(rèn)值。
strict (boolean): 以strict模式進(jìn)行更新。
overwrite (boolean): 默認(rèn)為false。禁用update-only模式,允許覆蓋記錄
示例
MyModel.update({ name: "Tobi" }, { ferret: true }, { multi: true }, function (err, raw) { if (err) return handleError(err); console.log("The raw response from Mongo was ", raw); });
更新多個(gè) name 為 Tobi 的文檔 將 ferret 設(shè)置為 true
Model.updateMany
更新多條數(shù)據(jù) 與update相同
Model.updateOne
更新一條數(shù)據(jù) 設(shè)置 multi 無效
查找find: Model.find(conditions, [projection], [options], [callback])
conditions:查詢條件;projection:控制返回的字段;options:控制選項(xiàng);callback:回調(diào)函數(shù)。
示例
// 命名 john age 大于等于 18 只返回 title 與 author 字段 skip 跳過 10 條 MyModel.find({ name: "john", age: { $gte: 18 }},{title: 1, author: 1}, { skip: 10 }, function (err, docs) {}); // 返回一個(gè)query對(duì)象 類似于 promise exec 于 then var query = MyModel.find({ name: /john/i }, null, { skip: 10 }) query.exec(function (err, docs) {});
findOne: Model.findOne([conditions], [projection], [options], [callback])
使用方法與 find 相同 只不過只返回第一個(gè)查詢記錄
findById: Model.findById(id, [projection], [options], [callback])
根據(jù) _id 字段查詢
相關(guān)查詢?cè)斠?mongoDB
比較查詢操作符$gt 大于(>)
$lt 小于(<)
$gte 大于等于(>=)
$lte 小于等于(<=)
$eq 等于(=)
$ne 不等于(!=)
$in 一個(gè)鍵對(duì)應(yīng)多個(gè)值(在數(shù)組中)
Model.find( { qty: { $in: [ 5, 15 ] } } ) // 查詢 qty 等于 5 或者 15 的文檔
$nin 同上取反, 一個(gè)鍵不對(duì)應(yīng)指定值
邏輯查詢操作符$or 多個(gè)條件匹配, 可以嵌套 $in 使用
Model.find( { $or: [ { quantity: { $lt: 20 } }, { price: 10 } ] } ) // 查詢 quantity 小于 20 或者 price 等于 10 的文檔
$nor 同上取反
$not 不符合條件的文檔
Model.find( { price: { $not: { $gt: 1.99 } } } ) // price 不大于 1.99的
$and 與
其他常用運(yùn)算符limit 指定返回的最大條數(shù)
Query#limit(val)
query.limit(20)
skip 指定要跳過的條數(shù)
常用于分頁 公式 skip = (page<頁數(shù)> - 1) * pageSize<每頁條數(shù)>;
Query#skip(val)
query.skip(100).limit(20)
sort 排序 降序 -1 升序 1
Query#sort(arg)
query.sort({ test: -1 }); // 將 query 降序排列
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/19037.html
摘要:如圖連接成功后,顯示你的數(shù)據(jù)庫,在這個(gè)節(jié)目可以對(duì)數(shù)據(jù)庫進(jìn)行操作。如圖安裝與加載首先假定你已經(jīng)安裝了,命令行工具輸入在使用的文件中即可。創(chuàng)建讀取更新刪除單值讀取上文是在中基于對(duì)進(jìn)行增刪查改操作的簡單介紹,以后會(huì)有進(jìn)階的文章。 關(guān)鍵詞:mongodb安裝 mongoose使用 robomongo mongoose的CRUD操作 mongoose的查詢,增加,修改,刪除 工具介紹 Mon...
摘要:如圖連接成功后,顯示你的數(shù)據(jù)庫,在這個(gè)節(jié)目可以對(duì)數(shù)據(jù)庫進(jìn)行操作。如圖安裝與加載首先假定你已經(jīng)安裝了,命令行工具輸入在使用的文件中即可。創(chuàng)建讀取更新刪除單值讀取上文是在中基于對(duì)進(jìn)行增刪查改操作的簡單介紹,以后會(huì)有進(jìn)階的文章。 關(guān)鍵詞:mongodb安裝 mongoose使用 robomongo mongoose的CRUD操作 mongoose的查詢,增加,修改,刪除 工具介紹 Mon...
摘要:文檔是的核心概念,是鍵值對(duì)的一個(gè)有序集,在里文檔被表示成對(duì)象。創(chuàng)建集合數(shù)據(jù)庫中的集合名稱當(dāng)我們對(duì)其添加數(shù)據(jù)時(shí)如果已經(jīng)存在,則會(huì)保存到其目錄下,如果未存在,則會(huì)創(chuàng)建集合,然后在保存數(shù)據(jù)。使用創(chuàng)建,如下示例連接成功許巍男保存成功保存失敗參考 mongoose簡介 mongoose網(wǎng)站:https://mongoosejs.com/ 為什么要用Mongoose Mongoose就是一個(gè)讓我們...
摘要:使用操作是基于開發(fā)的驅(qū)動(dòng),可以在異步的環(huán)境下執(zhí)行。比如,啟動(dòng),直接在終端輸入就可以啟動(dòng)啦默認(rèn)運(yùn)行在。還可以自定義端口或者輸入的使用首先新建一個(gè)名為的文件夾,該文件夾就是數(shù)據(jù)庫目錄。 使用Mongoose操作MongoDB Mongoose是基于node-mongodb-native開發(fā)的MongoDB nodejs驅(qū)動(dòng),可以在異步的環(huán)境下執(zhí)行。 關(guān)于在Mac下安裝和使用MongoDB...
摘要:下載依賴包完成項(xiàng)目創(chuàng)建,項(xiàng)目結(jié)構(gòu)連接數(shù)據(jù)庫在根目錄下創(chuàng)建,輸入以下代碼,監(jiān)聽的幾個(gè)事件,如果以上操作都沒錯(cuò)的話,那么就會(huì)監(jiān)聽第一個(gè)事件事件,表示連接數(shù)據(jù)庫成功,在最后,我們導(dǎo)出對(duì)象,以供其他模塊使用。 一、準(zhǔn)備工作 1. 啟動(dòng)mongo數(shù)據(jù)庫 關(guān)于下載安裝啟動(dòng)數(shù)據(jù)庫我這里就不做過多解釋,谷歌下會(huì)有很多教程,啟動(dòng)成功后的命令窗如下所示: showImg(https://segmentfa...
閱讀 3762·2021-09-22 15:17
閱讀 1946·2021-09-22 14:59
閱讀 2346·2020-12-03 17:00
閱讀 3209·2019-08-30 15:55
閱讀 482·2019-08-30 11:23
閱讀 3487·2019-08-29 13:56
閱讀 518·2019-08-29 12:54
閱讀 2257·2019-08-29 12:49