mirror of https://gitee.com/bigwinds/arangodb
53 lines
1.9 KiB
Markdown
53 lines
1.9 KiB
Markdown
|
|
@startDocuBlock collectionWithin
|
|
@brief constructs a within query for a collection
|
|
`collection.within(latitude, longitude, radius)`
|
|
|
|
This will find all documents within a given radius around the coordinate
|
|
(*latitude*, *longitude*). The returned array is sorted by distance,
|
|
beginning with the nearest document.
|
|
|
|
In order to use the *within* operator, a geo index must be defined for the
|
|
collection. This index also defines which attribute holds the coordinates
|
|
for the document. If you have more then one geo-spatial index, you can use
|
|
the `geo` operator to select a particular index.
|
|
|
|
|
|
`collection.within(latitude, longitude, radius).distance()`
|
|
|
|
This will add an attribute `_distance` to all documents returned, which
|
|
contains the distance between the given point and the document in meters.
|
|
|
|
`collection.within(latitude, longitude, radius).distance(name)`
|
|
|
|
This will add an attribute *name* to all documents returned, which
|
|
contains the distance between the given point and the document in meters.
|
|
|
|
**Note**: this method is not yet supported by the RocksDB storage engine.
|
|
|
|
Note: the *within* simple query function is **deprecated** as of ArangoDB 2.6.
|
|
The function may be removed in future versions of ArangoDB. The preferred
|
|
way for retrieving documents from a collection using the within operator is
|
|
to use the AQL *WITHIN* function in an AQL query as follows:
|
|
|
|
```
|
|
FOR doc IN WITHIN(@@collection, @latitude, @longitude, @radius, @distanceAttributeName)
|
|
RETURN doc
|
|
```
|
|
|
|
@EXAMPLES
|
|
|
|
To find all documents within a radius of 2000 km use:
|
|
|
|
@EXAMPLE_ARANGOSH_OUTPUT{009_collectionWithin}
|
|
~ db._create("geo");
|
|
~ db.geo.ensureIndex({ type: "geo", fields: [ "loc" ] });
|
|
|~ for (var i = -90; i <= 90; i += 10) {
|
|
| for (var j = -180; j <= 180; j += 10) {
|
|
db.geo.save({ name : "Name/" + i + "/" + j, loc: [ i, j ] }); } }
|
|
db.geo.within(0, 0, 2000 * 1000).distance().toArray();
|
|
~ db._drop("geo");
|
|
@END_EXAMPLE_ARANGOSH_OUTPUT
|
|
|
|
@endDocuBlock
|