mongodb中非常好用的Aggregate入門教程
前言
aggregate 翻譯過來是聚合的意思, 但是在實際的使用的它的體驗特別像linux中的管道, 每個管道處理完之后再把結(jié)果交個下一個管道, 你的數(shù)據(jù)就像水流, 最后通過各個管道你能夠得到你想要的數(shù)據(jù)
我們一般用Aggregate做什么
- 聚合 平均數(shù) 等數(shù)據(jù)處理 group sum
- 地理位置信息 $geoNear
- 基本上mongodb的所有查詢操作我們都可以用 aggregate實現(xiàn), 用好這個基本上是萬金油了
在這里我主要想記錄一下mongodb在地理位置信息查詢中使用到的技術(shù),不僅可以查詢到 距離 還可以按照距離排序
$geoNear 地理位置信息查詢
首先我們的坐標數(shù)據(jù)在庫里面怎么存, 類型為 Array , 記得加 2d 索引, 當然還有3d 索引, 目前還沒有用到
const storeschema = new mongoose.Schema({ name: { type: String, required: true }, point: { type: Array, required: true }, // [lon, lat] }); storeschema.index({ point: '2d' }); return mongoose.model('store', storechema);
然后按照就是地理查詢代碼了
this.ctx.model.Store.aggregate([{ $geoNear: { spherical: true, // spherical 是否按照球形狀來求距離 distanceMultiplier: 6378137, maxDistance: 10000, near: [ lon1, lat1 ], distanceField: 'dist', key: 'point', query: { } }, }, //distanceMultiplier 這個參數(shù)是用于確定你返回的距離是什么單位 6378137 的單位是m //maxDistance 查詢的最大距離 // near 中心點坐標 // distanceField 距離放在哪個屬性 // key 保存坐標數(shù)據(jù)的地方 // query 你的過濾條件
有一個很有意思的地方是 match 所以在這里有一個 query屬性來補齊這種遺憾
但是你可以在 后面 使用$match 對查到的所有地理位置信息數(shù)據(jù)做再一次的篩選
$lookup mongodb中的聯(lián)表查詢
$lookup 是在比較新的mongodb版本中才能使用的屬性, 當然這個屬性也是用于 aggregate中的, 它補齊了之前mongodb中無法聯(lián)表的遺憾
看代碼
await this.ctx.model.MemberInfo.aggregate([ { $match: { store: new ObjectId(store) } }, { $lookup: { from: 'users', localField: 'user', foreignField: '_id', as: 'user' } }, { $replaceRoot: { newRoot: { $mergeObjects: [{ $arrayElemAt: [ '$user', 0 ] }, '$$ROOT' ] } } }, { $match: { 'certification.name': { $regex: search } } }, { $project: { _id: 1 } } ]);
memberinfo 與 user 表在這里我想要獲取 memberinfo localField: 'user'
為外鍵對應(yīng) user表 foreignField: '_id'
_id字段他的額外屬性...
說白了 我的會員表里面只存了用戶的id 現(xiàn)在我想要拿到用戶的 其它信息...
附上鏈接吧 $lookup
寫在最后
當然說他是查詢?nèi)f金油他當然支持 定義數(shù)據(jù)的輸出 limit $sort 等常規(guī)操作
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關(guān)文章
Navicat遠程連接MongoDB最全實現(xiàn)方法以及報錯解決
這篇文章主要給大家介紹了關(guān)于Navicat遠程連接MongoDB最全實現(xiàn)方法以及報錯解決的相關(guān)資料,文中通過圖文將實現(xiàn)的步驟一步步介紹的非常詳細,對大家學習或者使用MongoDB具有一定的參考學習價值,需要的朋友可以參考下2023-03-03使用centos系統(tǒng)中的crontab命令對mongodb定時備份恢復
編寫centos腳本使用crontab命令對mongodb定時執(zhí)行備份與恢復操作,并刪除指定天數(shù)前的備份2018-03-03MongoDB客戶端工具NoSQL?Manager?for?MongoDB介紹
這篇文章介紹了MongoDB客戶端工具NoSQL?Manager?for?MongoDB,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-06-06詳解Mongodb?多文檔聚合操作處理方法(Map-reduce?函數(shù))
這篇文章主要介紹了Mongodb多文檔聚合操作處理方法(Map-reduce函數(shù)),本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-07-07MongoDB數(shù)據(jù)庫常用28條查詢語句總結(jié)
我們經(jīng)常使用的MySQL是最流行的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),隨著時代的進步,互聯(lián)網(wǎng)的發(fā)展關(guān)系型數(shù)據(jù)庫已經(jīng)不滿足于互聯(lián)網(wǎng)的需求,因此出現(xiàn)了非關(guān)系數(shù)據(jù)庫,下面這篇文章主要給大家總結(jié)介紹了關(guān)于MongoDB數(shù)據(jù)庫常用28條查詢語句,需要的朋友可以參考下2023-05-05Linux下MongoDB數(shù)據(jù)庫實現(xiàn)自動備份詳解
這篇文章主要給大家介紹了在Linux系統(tǒng)下下MongoDB數(shù)據(jù)庫實現(xiàn)自動備份的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下面跟著小編一起來學習學習吧。2017-06-06