mongodb geoNear vs near

前端 未结 4 2078
梦如初夏
梦如初夏 2021-02-04 09:17

It looks like mongodb offers two similar functions for geospatial queries - $near and $geoNear. According to the mongo docs

The

相关标签:
4条回答
  • 2021-02-04 09:22

    The main difference is that $near is a query operator, but $geoNear is an aggregation stage. Both return documents in order of nearest to farthest from the given point.

    What it means is that $near can be used in find() queries or in the $match aggregation stage, but $geoNear cannot. Instead $geoNear must be used as a separate aggregation stage only.

    The options each feature provides also differ. I invite you to review the details in the corresponding documentaiton sections:

    $near documentation
    $geoNear documentation

    0 讨论(0)
  • 2021-02-04 09:27

    The 100 documents limit with GeoNear is the default behaviour but you can just set the num fields as described on the mongodb documentation (http://docs.mongodb.org/manual/reference/command/geoNear/)

    Default is set to 100 but you can set more. Unfortunately skip parameter is missing for the moment (see https://jira.mongodb.org/browse/SERVER-3925)

    0 讨论(0)
  • 2021-02-04 09:32

    These are major differences :-

    1. $geoNear also gives you distance from the point but $near command doesn't.

    2. $geoNear command requires that the collection have at most only one 2d index and/or only one 2dsphere index whereas geospatial query operators like $near and $geoWithin permit collections to have multiple geospatial indexes. This is because in $geoNear command there is no option to specify the field on which you want to search, where as in $near command you can specify the field name.

    0 讨论(0)
  • 2021-02-04 09:41

    Efficiency should be identical for either.

    geoNear's major limitation is that as a command it can return a result set up to the maximum document size as all of the matched documents are returned in a single result document. It also requires that a distance field be added to each result document which may or may not be an issue depending on your usage.

    $near is a query operator so the results can be larger than a single document (they are still returned in a single response but not a single document). You can also set the maximum number of documents via the query's limit().

    I tend to recommend that users stick with the $near unless they need the diagnostics (e.g., distance, or location matched) from the geonear command.

    0 讨论(0)
提交回复
热议问题