国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

mongoose 操作備忘

happyhuangjinjin / 676人閱讀

摘要:如果不存在則創(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 } 用于解決如下警告

(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...

創(chuàng)建 Schema

詳見 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)建model
var 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 表中 sizelarge 的數(shù)據(jù)

改(更新)

update: Model.update(conditions, doc, [options], [callback])

參數(shù)

conditions 查詢條件 doc 要更新的文檔
[options] 選項(xiàng) [callback] 回調(diào)函數(shù)

注: 不能修改主鍵 _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è) nameTobi 的文檔 將 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

相關(guān)文章

  • 在Node中基于Mongoose對(duì)MongoDB進(jìn)行增刪查改(CRUD)操作(一)

    摘要:如圖連接成功后,顯示你的數(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...

    lemon 評(píng)論0 收藏0
  • 在Node中基于Mongoose對(duì)MongoDB進(jìn)行增刪查改(CRUD)操作(一)

    摘要:如圖連接成功后,顯示你的數(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...

    SillyMonkey 評(píng)論0 收藏0
  • MongoDB學(xué)習(xí)之Mongoose的使用

    摘要:文檔是的核心概念,是鍵值對(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è)讓我們...

    qieangel2013 評(píng)論0 收藏0
  • Node.js操作MongoDB數(shù)據(jù)庫

    摘要:使用操作是基于開發(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...

    chaosx110 評(píng)論0 收藏0
  • 「全棧初探」- Mongoose的簡單使用

    摘要:下載依賴包完成項(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...

    vboy1010 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<