日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Node.js 常用Mongoose方法

發布時間:2024/4/14 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Node.js 常用Mongoose方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Node.js 手冊查詢-Mongoose 方法

一、Schema

  一種以文件形式存儲的數據庫模型骨架,無法直接通往數據庫端,也就是說它不具備對數據庫的操作能力.可以說是數據屬性模型(傳統意義的表結構),又或著是“集合”的模型骨架

/* 定義一個 Schema */ var mongoose = require("mongoose");var TestSchema = new mongoose.Schema({name : { type:String },//屬性name,類型為Stringage : { type:Number, default:0 },//屬性age,類型為Number,默認為0time : { type:Date, default:Date.now },email: { type:String,default:''} });

上面這個 TestSchema包含4個屬性 [name, age, time, email]

二、Model

由Schema構造生成的模型,除了Schema定義的數據庫骨架以外,還具有數據庫操作的行為,類似于管理數據庫屬性、行為的類?

var db = mongoose.connect("mongodb://127.0.0.1:27017/test");// 創建Model var TestModel = db.model("test1", TestSchema);

test1 數據庫中的集合名稱, 不存在會創建.

model - 文檔操作

mongoose的操作方法基本都在文檔操作中。

1.構造函數, 參數1:集合名稱, 參數2:Schema實例

db.model(“test1”, TestSchema );

2.查詢, 參數1忽略,或為空對象則返回所有集合文檔

model.find({}, callback);model.find({},field,callback); 過濾查詢,參數2: {‘name’:1, ‘age’:0} 查詢文檔的返回結果包含name , 不包含age.(_id默認是1)model.find({},null,{limit:20}); 過濾查詢,參數3: 游標操作 limit限制返回結果數量為20個,如不足20個則返回所有.model.findOne({}, callback); 查詢找到的第一個文檔model.findById(‘obj._id’, callback); 查詢找到的第一個文檔,同上. 但是只接受 __id 的值查詢

3.創建, 在集合中創建一個文檔

Model.create(文檔數據, callback))

4.更新,參數1:查詢條件, 參數2:更新對象,可以使用MondoDB的更新修改器

Model.update(conditions, update, function(error)

5.刪除, 參數1:查詢條件

Model.remove(conditions,callback);

更新修改器:

6.‘$inc’ 增減修改器,只對數字有效.下面的實例: 找到 age=22的文檔,修改文檔的age值自增1

Model.update({‘age’:22}, {’$inc’:{‘age’:1} } ); 執行后: age=23

7.‘$set’ 指定一個鍵的值,這個鍵不存在就創建它.可以是任何MondoDB支持的類型.

Model.update({‘age’:22}, {’$set’:{‘age’:‘haha’} } ); 執行后: age=‘haha’

8.‘$unset’ 同上取反,刪除一個鍵

Model.update({‘age’:22}, {’$unset’:{‘age’:‘haha’} } ); 執行后: age鍵不存在

數組修改器:

9.‘$push’ 給一個鍵push一個數組成員,鍵不存在會創建

Model.update({‘age’:22}, {’$push’:{‘array’:10} } ); 執行后: 增加一個 array 鍵,類型為數組, 有一個成員 10

10.‘$addToSet’ 向數組中添加一個元素,如果存在就不添加

Model.update({‘age’:22}, {’$addToSet’:{‘array’:10} } ); 執行后: array中有10所以不會添加

11. ‘$each’ 遍歷數組, 和 $push 修改器配合可以插入多個值

Model.update({‘age’:22}, {’$push’:{‘array’:{’$each’: [1,2,3,4,5]}} } ); 執行后: array : [10,1,2,3,4,5]

12.‘$pop’ 向數組中尾部刪除一個元素

Model.update({‘age’:22}, {’$pop’:{‘array’:1} } ); 執行后: array : [10,1,2,3,4] tips: 將1改成-1可以刪除數組首部元素

13.‘$pull’ 向數組中刪除指定元素

Model.update({‘age’:22}, {’$pull’:{‘array’:10} } ); 執行后: array : [1,2,3,4] 匹配到array中的10后將其刪除

條件查詢:

a. “$lt小于

b. “$lte小于等于

c. “$gt大于

d. “$gte大于等于

e. “$ne不等于

params = {salePrice:{$gt: priceGt,$lte: priceLt}} let goodsModel = Goods.find(params)

或查詢 OR:

  • ‘$in’ 一個鍵對應多個值
  • ‘$nin’ 同上取反, 一個鍵不對應指定值
  • “$or” 多個條件匹配, 可以嵌套 $in 使用
  • “$not” 同上取反, 查詢與特定模式不匹配的文檔 Model.find({“age”:{ “$in”:[20,21,22.‘haha’]} } ); 查詢 age等于20或21或21或’haha’的文檔Model.find({"$or" : [ {‘age’:18} , {‘name’:‘xueyou’} ] }); 查詢 age等于18 或 name等于’xueyou’ 的文檔

    類型查詢:

    null 能匹配自身和不存在的值, 想要匹配鍵的值 為null, 就要通過 “$exists” 條件判定鍵值已經存在 "$exists" (表示是否存在的意思)

  • Model.find(“age” : { “$in” : [null] , “exists” : true } ); 查詢 age值為null的文檔 Model.find({name: {$exists: true}},function(error,docs){//查詢所有存在name屬性的文檔 });Model.find({telephone: {$exists: false}},function(error,docs){//查詢所有不存在telephone屬性的文檔 });

    正則表達式:

    MongoDb 使用 Prel兼容的正則表達式庫來匹配正則表達式

    find( {“name” : /joe/i } ) 查詢name為 joe 的文檔, 并忽略大小寫find( {“name” : /joe?/i } ) 查詢匹配各種大小寫組合

    查詢數組:

    Model.find({“array”:10} ); 查詢 array(數組類型)鍵中有10的文檔, array : [1,2,3,4,5,10] 會匹配到Model.find({“array[5]”:10} ); 查詢 array(數組類型)鍵中下標5對應的值是10, array : [1,2,3,4,5,10] 會匹配到

    $all’ 匹配數組中多個元素

    Model.find({“array”:[5,10]} ); 查詢 匹配array數組中 既有5又有10的文檔

    ‘$size’ 匹配數組長度

    Model.find({“array”:{"$size" : 3} } ); 查詢 匹配array數組長度為3 的文檔

    ‘$slice’ 查詢子集合返回

    Model.find({“array”:{"$skice" : 10} } ); 查詢 匹配array數組的前10個元素Model.find({“array”:{"$skice" : [5,10] } } ); 查詢 匹配array數組的第5個到第10個元素

    ?

常用方法:

1、刪除購物車

/** * 購物車刪除 */ router.post('/cart/del', function(req, res, next) {var userId = req.cookies.userId,productId = req.body.productId;User.update({userId: userId // 根據 ID 找到相對應的數據庫數據 },{$pull:{ // 刪除特定元素'cartlist': { // 找到 相對的cartlist 根據 productId 刪除相對應的 數據'productId': productId}}}, (err, doc) => {if(err){res.json({status: "1",msg: err.message,result: ''});}else{res.json({status: "0",msg: '',result: doc});}}); });

?2、購物車數量修改

/** * 購物車數量修改 */ router.post('/cart/edit', function(req, res, next) {var userId = req.cookies.userId,productId = req.body.productId,productNum = req.body.productNum;// 根據 userId 先找到這個用戶數據,再找到跟傳遞過來的 productId 相對應的 cartlist 里面的那個商品數據,第一步是查找數據// 這個不找找的是就是子數據,不是 productNum 相對應的那個商品 json User.update({"userId": userId,"cartlist.productId": productId},{// 找到那個數據之后 利用這個方法更改數量'cartlist.$.productNum': productNum}, (err, doc) => {if(err){res.json({status: "1",msg: err.message,result: ''});}else{res.json({status: "0",msg: '',result: 'suc'});}}); });

3、新增地址(向數據庫新添加數據)

router.post('/addNewAddress', (req, res, next) => {var userId = req.cookies.userId,addressName = req.body.addressName,tel = parseFloat(req.body.tel),streetName = req.body.streetName,postCode = req.body.postCode;User.findOne({userId: userId}, (err, doc) => {if(err){res.json({status: "1",msg: err.message,result: ''});}else{if(doc){var addressList = doc.addressList,num = parseInt(addressList.length) - 1,addressId = addressList[num].addressId,addressNewId = '';addressNewId = parseInt(addressId) + 1;var jsonNew = {addressId: addressNewId,addressName: addressName,tel: tel,streetName: streetName,postCode: postCode};// 將新建的json數據直接push到以前的數組中,然后保存就可以了 addressList.push(jsonNew);doc.save((err1, doc1) => {if(err1){res.json({status: "1",msg: err1.message,result: ''});}else{res.json({status: "0",msg: '',result: 'suc'});}});}}}); });

?4、查看所有地址(查)

/** * addressList */ router.get('/addressList', function(req, res, next) {var userId = req.cookies.userId;User.findOne({userId: userId}, (err, doc) => {if(err){res.json({status: "1",msg: err.message,result: ''});}else{if(doc){res.json({status: "0",msg: '',result: doc.addressList});}}}); });

?

轉載于:https://www.cnblogs.com/haonanZhang/p/8306008.html

總結

以上是生活随笔為你收集整理的Node.js 常用Mongoose方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。