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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

详细的mongo工具手册,包含常见CURD+条件操作+聚合+案例

發布時間:2025/3/21 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 详细的mongo工具手册,包含常见CURD+条件操作+聚合+案例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

詳細的mongo工具手冊,包含常見CURD+條件操作+聚合+案例
原創置頂 ldz_miantiao 最后發布于2019-11-19 21:57:17 閱讀數 36 ?收藏
展開
之前寫過一篇mongoose常用的經典記錄,用來自查詢,因為老是忘記mongo的書寫格式,所以索性將自己的學習筆記放到博客上,并供大家參考,如果代碼有問題請在評論指出。


一、創建數據庫
使用原生,insert和save的區別是:insert只會無腦增加,而sava是“有則更新,無則增加”;
//插入一條
db.user.insert({name:"a"})
//插入多條
db.user.insertMany({name:"a"},{name:"b"})
1
2
3
4
使用mongoose創建基礎格式;
const mongoose = require('mongoose')
congst schema = new mongoose.Schema({
?? ?name:{
?? ??? ?type:String,
?? ??? ?require:true
?? ?}
})
module.exports = mongoose.model('user',schema)

1
2
3
4
5
6
7
8
9
使用mongoose添加數據(create和save的區別是:create只會無腦增加,而sava是“有則更新,無則增加);
user.create(數據對象) //如:request.body.user
1
二、簡單查詢
findOne()只會返回符合條件第一個文檔,db.user.find() 會返回所有符合條件的文檔;
格式:({“鍵名”:“鍵值”})
例:
?db.user.find({'name': "小明"})
1
$and和$or是常用的關鍵符。顧名思義,and是需要一起實現,or是符合之一;
例1:查找名字是小明且性別是男的字段(請注意$and的位置)

?db.user.find(
??? ?{
??? ??? ?$and:[
?? ? ?? ??? ?{'name': "小明"},
?? ? ?? ??? ?{'sex': "男"}
?? ? ?? ?]
??? ?}//第一個{}里面放條件
?)
1
2
3
4
5
6
7
8
例2:查找名字是小明且性別是男或者年齡是18的字段(請注意$or的位置)

?db.user.find(
??? ?{
??? ??? ?'name': "小明",?
?? ??? ?$or:[
?? ? ?? ??? ?{'sex': "男"},
?? ? ?? ??? ?{'age': 18}
?? ? ?? ?]
?? ?}//第一個{}里面放條件
?)
1
2
3
4
5
6
7
8
9
投影器 ,設置需要返回的字段值,去除無用的數據字段;
例:假設小明的一條文檔里有名字、性別、年齡和成績,那么我只需要返回他的成績字段。

?db.user.find(
??? ?{
??? ??? ?'name': "小明",?
?? ?},//第一個{}里面放條件
?? ?{
?? ??? ?"grade":1 ?//第二個{}里放投影
?? ?}
?)
1
2
3
4
5
6
7
8
使用正則表達式進行條件搜索
例:找出名字以St或者Te開頭的且班級以為Che開頭的所有人

?db.user.find({'name': /(St|Te)*/i, 'class':/(Che)*/i})
1
更多搜索需求請查看后續內容
四、更新(添加)和移除字段
update()和$set()用于更新單個文檔,注意update()默認只更新第一個符合條件的數據,想要更新所有的數據,需要配合使用multi;
格式:({條件},{$set{數據}})
例:將符合條件的第一個小明的性別改成女

?db.user.update(
??? ?{'name': "小明"}, //第一個{}里面放條件
??? ?{
?? ??? ?$set:{'sex': "女"}
?? ?}
?)
1
2
3
4
5
6
例:將所有小明的性別改成女

?db.user.update(
??? ?{'name': "小明"}, //第一個{}里面放條件
??? ?{
?? ??? ?$set:{'sex': "女"}
?? ?},
?? ?{
?? ??? ?"multi":true //匹配所有符合條件的
?? ?}
)
1
2
3
4
5
6
7
8
9
$push和$addToset可以實現插入文檔的功能,結合$each可以插入多個;
$push直接將值插入一個文檔中,并不管相同的值是否已經在數組中存在了。
$addToSet判斷相同的值是否在數組中已經存在,如存在則不再重復加入。
?db.user.update(
??? ?{'name': "小明"}, //第一個{}里面放條件
?? ?{
?? ??? ?$addToset{?? ?
?? ??? ??? ?"grade": 89 //插入成績,并且檢測是否有重復
?? ??? ?}
?? ?}
)
1
2
3
4
5
6
7
8
添加多個值到文檔中

db.students.update(
? ?{ name: "小明" },
? ?{?
? ? ?? ?$push:?
? ??? ??? ?{?
? ??? ??? ??? ?grade: {
? ??? ??? ??? ??? ? $each: [ 90, 92, 89 ]
? ??? ??? ??? ? }
? ??? ??? ?}
? ??? ?}
)
1
2
3
4
5
6
7
8
9
10
11
update()和$unset()通常用來移除字段,同樣的只作用于符合條件的第一個文檔,將multi設置為true即可作用所有文檔;
例:將所有user里面的age字段移除

?db.user.update(
??? ?{'name': "小明"}, //第一個{}里面放條件
??? ?{
?? ??? ?$unset:{'age': ""} //移除age
?? ?},
?? ?{
?? ??? ?"multi":true //匹配所有符合條件的
?? ?}
)
1
2
3
4
5
6
7
8
9
五、刪除操作
remove()通常同來移除文檔,默認作用于匹配出的第一個;
例:刪除所有name是小明的數據

?db.user.remove(
??? ?{'name': "小明"}, //第一個{}里面放條件
?? ?{
?? ??? ?"multi":true //匹配所有符合條件的
?? ?}
)
1
2
3
4
5
6
drop()用來刪除整個集合,返回結果true表示刪除成功;
db.user.drop()
1
六、條件操作符
$lt 小于
$lte 小于等于
$gt 大于
$gte 大于等于
$in 包含(匹配單值)
$all 包含(多值),常用于數組多值匹配
$not 非
$exists 是否存在
例:找出年齡小于18歲的人

db.user.find(
?? ?{
?? ??? ?'name': { "$lt":18 }
?? ?} //第一個{}放條件
)
1
2
3
4
5
例:找出C1 或者C2班級的同學

db.user.find(
?? ?{
?? ??? ?'name': { "$in":["C1","C2"] }
?? ?} //第一個{}放條件
)
1
2
3
4
5
例:設置上限和下限,找出大于16歲,小于18歲的人

db.user.find(
?? ?{
?? ??? ?'age': { "$gt":16,"$lt":18 }
?? ?} //第一個{}放條件
)
1
2
3
4
5
例:找出性別是“男”或者班級的值是C1 或 C2的人,并且年齡要小于18歲

db.user.find(
?? ?{
?? ??? ?$or:[{
?? ??? ??? ?"sex":'男',
?? ??? ??? ?"class":{ "$in":["C1","C2"] }
?? ??? ?}],
?? ??? ?"age":{ "$lt":18 }
?? ?} //第一個{}放條件
)
1
2
3
4
5
6
7
8
9
七、其它使用頻率極高的常用操作
所有的操作符是可以連續寫下去的,類似jquery;

$count()根據條件查詢符合要求的文檔的總數量;
例:

db.user.find( {'name': "小明"} ).count() //返回查詢出文檔的總數量
1
$sort()可以將結果進行指定字段進行排序,1是升序,0是降序;
例:將查找到的性別為 “男” 的字段按照成績進行升序排序。

db.user.find({'sex': "男"}).sort(1);
1
limit(數字)可以限制返回的數量;
例:只返回兩條文檔

db.user.find({'name': "小明"}).limit(2) //?
1
skip(數字)可以跳過一定數量的文檔進行查詢,將它于limit()進行配合,可以做分頁功能查詢;
例:跳過前2條數據,再進行查詢,并且只要查詢出10條數據

db.user.find({'name': "小明"}).skip(2).limit(10) //?
1
$size可以通過值的數量(常用于數組),來當作條件匹配文檔
例:查找職位(數組)擁有2個的人

db.user.find({'position':{$size: 2}})
1
八、多表關聯:aggregate()
$lookup:根據一個集合的字段,查出另一個相關聯的集合所有信息。

有集合A和集合B,他們的數據描述同一個事務,并且A中用的字段是a,B中用的字段是b,那么 $lookup可以a與b進行關聯,相當于做成外鍵,并且把B(也可以是A)所有的匹配字段拆出來給對方。

用法:

user.aggregate(
?? ?$lookup:{
?? ??? ?from: 被join(拆)的集合,
?? ??? ?localField: 原集合中 user 的 關鍵字,
?? ??? ?foreignField: 被拆集合中的 關鍵字,
?? ??? ?as: 新增的 字段名
?? ?}
)
1
2
3
4
5
6
7
8
例子:
集合A:

{ "name":a1, "modelA": CCC },
{ "name":a2, "modelA": CCC },
{ "name":a3, "modelA": DDD }
1
2
3
集合B:

{ "modelB": CCC, "money":1,"age": 18},
1
進行關聯

A.aggregate(
?? ?$lookup:{
?? ??? ?from: "B",
?? ??? ?localField: ?"modelA",
?? ??? ?foreignField: "modelB",
?? ??? ?as: newB
?? ?}
)
1
2
3
4
5
6
7
8
會得到:

{ "name":a1, "modelA": CCC, "newB":[ { "money":1 , "age": 18 } ]},
{ "name":a2, "modelA": CCC, "newB":[ { "money":1 , "age": 18 } ]},
{ "name":a3, "modelA": DDD, "newB":[] }
1
2
3
更多的$lookup細節功能可以查看:$lookup參考博客文章
————————————————
版權聲明:本文為CSDN博主「ldz_miantiao」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/qq_40282732/article/details/103135650

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的详细的mongo工具手册,包含常见CURD+条件操作+聚合+案例的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 欧美一区二区日韩 | 疯狂做爰的爽文多肉小说王爷 | 大尺度叫床戏做爰视频 | 亚洲欧美综合精品久久成人 | 波多野结衣免费视频观看 | 中国少妇乱子伦视频播放 | 日韩在线视频在线观看 | 少妇高潮一区二区三区喷水 | 欧美成人一区二区视频 | 色婷婷成人网 | 18女人毛片 | 精品人妻人人做人人爽夜夜爽 | 精品少妇一区二区三区在线观看 | 高潮一区二区三区 | 色天天| 久久久久久久久福利 | 91狠狠 | 亚洲欧美日韩天堂 | 天天综合网在线观看 | 禁漫天堂黄漫画无遮挡观看 | 亚洲国产免费视频 | 蜜臀aⅴ国产精品久久久国产老师 | 麻豆蜜桃av | 人妻无码一区二区三区久久99 | 天天干,天天干 | 色综合av综合无码综合网站 | 乳色吐息免费看 | 久久精品国产大片免费观看 | 欧美少妇精品 | 亚洲午夜18毛片在线看 | 亚洲乱码国产乱码精品 | 欧美黄色特级片 | 亚洲春色一区二区三区 | 精品无人区无码乱码毛片国产 | 51精产品一区一区三区 | 亚洲午夜无码av毛片久久 | 日本69少妇 | 乱色熟女综合一区二区三区 | 三级理伦 | 久久亚洲一区二区三区四区五区 | 国产99久久久久久免费看 | 欧美色一区二区三区在线观看 | 99热这里只有精品1 亚洲人交配视频 | 爽爽窝窝午夜精品一区二区 | 免费看黄色片的网站 | 在线观看波多野结衣 | 热热久| 国产欧美视频一区二区三区 | 欧美久久一区二区 | 日韩啊v | 中文字幕看片 | 国产传媒视频在线 | av无限看 | 久久精品天堂 | 人妻无码一区二区三区久久 | 嫩草视频国产 | 欧美电影一区 | 亚洲av无码一区二区三区在线播放 | 天堂网资源 | 亚洲精品久久夜色撩人男男小说 | 一区二区三区四区人妻 | 毛片久久久 | 农村妇女愉情三级 | 丁香婷婷综合网 | 亚洲欧洲中文 | 成年人网站黄 | 无码人妻精品一区二区蜜桃网站 | 日批视频网站 | 国产亚洲精品久久久久久久久动漫 | 男女无套免费视频网站动漫 | 加勒比hezyo黑人专区 | 国产丝袜在线播放 | 又大又硬又爽免费视频 | 国产精品sm调教免费专区 | 日本性高潮视频 | 亚洲精品美女视频 | 草在线视频| 自拍偷拍第2页 | 成人性生交大片免费看 | 影音先锋日韩资源 | 五月天六月婷 | 国产精品国产自产拍高清av | 男人的天堂av网站 | 激情五月开心婷婷 | 一道本av | 久草www| 香蕉视频97| 国产精品美女久久久久av爽 | 一区二区成人在线观看 | 国产成人精品一区二区色戒 | 精品成人在线观看 | 精品国产一区二区三区av性色 | 女同hd系列中文字幕 | 久久精品无码人妻 | 污片网站在线观看 | 日日爽夜夜 | 日韩视频在线观看一区二区三区 | 国产做爰免费视频观看 | 亚洲欧美日韩精品久久 |