日韩性视频-久久久蜜桃-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+条件操作+聚合+案例的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: av在线资源站 | 请用你的手指扰乱我吧 | 三上悠亚激情av一区二区三区 | 国产一区二 | 国产午夜视频在线播放 | 菠萝菠萝蜜网站 | 污污内射在线观看一区二区少妇 | 欧美福利视频一区 | 大地av | www.奇米.com| 日韩女优在线视频 | 国产免费一区二区三区视频 | 欧美日韩69 | 欧美怡红院| 美女视频黄a视频全免费观看 | 夜夜操狠狠操 | 中文字幕av解说 | 亚洲一区二区免费在线观看 | 欧美一区二区三区影视 | 实拍女处破www免费看 | 亚洲国产三级 | 九九九在线观看 | 国产免费专区 | 日韩二三区| 国产看黄网站 | 青草视频免费看 | 精品无码av一区二区三区四区 | 卡通动漫亚洲综合 | 亚洲三级视频 | 国产盗摄av | 乐播av一区二区三区 | 五月激情六月 | 久久精品婷婷 | 三级网站在线看 | 国产一二三 | 日韩v在线| 伊人365| 日韩免费在线视频观看 | 亚洲乱码国产乱码精品精98午夜 | 日韩高清精品免费观看 | 香蕉色网 | 亚洲少妇精品 | 国产一级淫片a视频免费观看 | 国产精品乱码一区二区 | 日韩黄网 | 91免费看大片 | 人妻丰满熟妇av无码区不卡 | 无码日韩精品视频 | 97超碰国产在线 | 午夜免费看片 | 在线免费观看黄网站 | 中文日韩在线 | 男人扒女人添高潮视频 | 可以免费看的黄色网址 | 国语精品 | 亚洲色图10p| 肥熟女一区二区三肥熟女 | 老熟妇仑乱一区二区av | 午夜之声l性8电台lx8电台 | 日本天堂在线播放 | 一区二区三区在线免费观看 | 五月天国产在线 | 中文字幕亚洲欧美日韩在线不卡 | 国产一区二区三区四区精 | 综合精品在线 | 亚洲欧洲中文 | 国产农村妇女精品一二区 | 国产精品成人久久电影 | 玉蒲团在线 | 中文字幕在线免费 | 欲色av | 超级碰在线视频 | 涩婷婷| 黄色www视频 | 最新版天堂资源在线 | 先锋av在线资源 | 最近日韩免费视频 | 国产99视频在线观看 | 国产精品区一区二 | 狼人综合伊人 | 国产精品夜夜嗨 | 成人91网站| 国产稀缺精品盗摄盗拍 | 韩国中文字幕在线观看 | 午夜视频观看 | 成人做爰www免费看视频网站 | 免费黄色在线网站 | jizz在线观看视频 | 国产精品视频一区二区在线观看 | 日韩精品一二三四 | 日本成人免费观看 | 羞羞漫画在线播放 | 夜夜看av| 一卡二卡三卡在线视频 | 91最新入口 | 亚洲第一色播 | 国产精品免费91 | 欧美日韩精品在线观看 | 国产理论一区 |