• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    mongodb中非常好用的Aggregate入门教程

    前言

    aggregate 翻译过来是聚合的意思, 但是在实际的使用的它的体验特别像linux中的管道, 每个管道处理完之后再把结果交个下一个管道, 你的数据就像水流, 最后通过各个管道你能够得到你想要的数据

    我们一般用Aggregate做什么

    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 你的过滤条件                

    有一个很有意思的地方是 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

    写在最后

    当然说他是查询万金油他当然支持 定义数据的输出  limit $sort 等常规操作

    总结

    以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

    您可能感兴趣的文章:
    • MongoDB入门教程之C#驱动操作实例
    • MongoDB入门教程之常用的运维技术介绍
    • MongoDB入门教程之分片技术详解
    • MongoDB入门教程之主从复制配置详解
    • MongoDB入门教程之索引操作浅析
    • MongoDB入门教程之聚合和游标操作介绍
    • MongoDB入门教程之细说MongoDB数据库的增删查改操作
    • MongoDB入门教程之Windows下的MongoDB数据库安装图解
    • MongoDB入门教程(包含安装、常用命令、相关概念、使用技巧、常见操作等)
    • MongoDB 简单入门教程(安装、基本概念、创建用户)
    上一篇:MongoDB 3.6版本中bind_ip设置详解
    下一篇:mongodb官方的golang驱动基础使用教程分享
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    mongodb中非常好用的Aggregate入门教程 mongodb,中,非常好,用的,Aggregate,