国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MongoDB > 正文

mongodb中非常好用的Aggregate入門教程

2020-03-14 12:38:08
字體:
來源:轉載
供稿:網友

前言

aggregate 翻譯過來是聚合的意思, 但是在實際的使用的它的體驗特別像linux中的管道, 每個管道處理完之后再把結果交個下一個管道, 你的數據就像水流, 最后通過各個管道你能夠得到你想要的數據

我們一般用Aggregate做什么

  • 聚合 平均數 等數據處理 group sum
  • 地理位置信息 $geoNear
  • 基本上mongodb的所有查詢操作我們都可以用 aggregate實現, 用好這個基本上是萬金油了

在這里我主要想記錄一下mongodb在地理位置信息查詢中使用到的技術,不僅可以查詢到 距離 還可以按照距離排序

$geoNear 地理位置信息查詢

首先我們的坐標數據在庫里面怎么存, 類型為 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 這個參數是用于確定你返回的距離是什么單位 6378137 的單位是m //maxDistance 查詢的最大距離 // near 中心點坐標// distanceField 距離放在哪個屬性// key 保存坐標數據的地方// query 你的過濾條件                

有一個很有意思的地方是mongodb,Aggregate match 所以在這里有一個 query屬性來補齊這種遺憾

但是你可以在   后面 使用$match 對查到的所有地理位置信息數據做再一次的篩選

$lookup mongodb中的聯表查詢

$lookup 是在比較新的mongodb版本中才能使用的屬性, 當然這個屬性也是用于 aggregate中的, 它補齊了之前mongodb中無法聯表的遺憾

看代碼

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' 為外鍵對應 user表 foreignField: '_id' _id字段他的額外屬性...

說白了 我的會員表里面只存了用戶的id  現在我想要拿到用戶的 其它信息...

附上鏈接吧 $lookup

寫在最后

當然說他是查詢萬金油他當然支持 定義數據的輸出 mongodb,Aggregate limit $sort 等常規操作

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網的支持。


注:相關教程知識閱讀請移步到MongoDB頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 胶南市| 焦作市| 和林格尔县| 罗平县| 手游| 永胜县| 边坝县| 柞水县| 黔江区| 斗六市| 安化县| 东丽区| 阿瓦提县| 扬中市| 永顺县| 广宁县| 浦东新区| 梅河口市| 文成县| 聂荣县| 绵竹市| 中山市| 南投市| 杭州市| 海口市| 公主岭市| 信宜市| 晋中市| 满洲里市| 博湖县| 老河口市| 河北区| 石林| 阿尔山市| 出国| 略阳县| 安乡县| 汉中市| 仪征市| 焦作市| 南澳县|