• 利用Mongodb做地理空间查询


    MongoDB
    是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。

    前言

    在移动开发中,经常会用到定位的功能,例如美团、饿了么、猫眼电影等的app,都是使用了移动端定位,然后查找出自己地理位置附近的一些服务、信息。

    所以本篇文章将会以Mongodb为数据库,讲述如何在数据库层级进行定位查询。

    分析

    举个例子,我们需要做一个app,商家可以把自己的商品发布到app上,用户打开app查看离自己从近到远的商品。

    如果没有地理位置的需求,那好办,直接插库然后查库就ok了,但是如果用到了地理位置,则需要用到Mongodb的一些位置功能。

    Mongodb有一种地理空间索引,利用它可以进行经纬度的计算,下面继续介绍如何使用该功能。

    实现

    下面以Nodejs+mongoose为例

    1. 创建Schema:
    const mongoose = require( 'mongoose' );
    let goodsSchema = new mongoose.Schema( {
        name: String,
        price: Number,
        location: {
            type: [ Number ],
            index: {
                type: '2dsphere',
                sparse: true
            }
        }
    }, {
        collection: 'Goods'
    } )
    
    1. 创建Model
    let goodsModel = mongoose.model(‘Goods’, goodsSchema)
    
    1. 插入数据
    按照以下数据格式往数据库插入数据:
    {
        "name":"名字",
        "price":12,
        "location":[经度,纬度]
    }
    
    1. 查看用户附近的数据
    goodsModel.find( {
            'location': {
                $nearSphere: [
                    parseFloat( 经度 ),
                    parseFloat( 纬度 )
                ],
                $maxDistance: 1000
            }
        } ).limit(10).skip(0).lean().exec();
    

    总结

    本次主要分享位置索引的用法,十分实用的一个功能,demo没有做得那么手把手,但是主要的骨架是出来了,可以自由发挥~

    备注: 这是后台需要弄的,android,ios,web需要使用定位服务找到用户的经纬度,传给后台即可

  • 相关阅读:
    python-json序列化和反序列化
    python-列表元祖字典集合、字符、字符串、函数处理
    Nmon监控服务端性能
    python-使用qq邮箱向163邮箱发送邮件、附件
    测试结论
    性能术语
    测试点-app、web、异常
    提测标准
    深度优先搜索的演示学习法——BlackBlank平台应用教学案例
    【赛后补题】ccpc2107秦皇岛H题
  • 原文地址:https://www.cnblogs.com/Jarvin/p/5706554.html
Copyright © 2020-2023  润新知