OPTIONS
Note: You are currently viewing version 3.0 of the Node.js driver documentation. Click here for the latest version.

Geospatial Search

You can query against geospatial indexes in several ways via the Node.js driver, using geospatial query operators.

To create a 2dsphere index on a collection, pass a document containing the name of the field to be indexed with the value ‘2dsphere’ to the createIndex() method.

function create2dSphereIndex(db, callback) {
 // Get the restaurants collection
 const collection = db.collection('restaurants');
 // Create the index
 collection.createIndex(
 { 'address.coord' : "2dsphere" }, function(err, result) {
 console.log(result);
 callback(result);
 });
};
const MongoClient = require('mongodb').MongoClient;
const assert = require('assert');
// Connection URL
const url = 'mongodb://localhost:27017';
// Database Name
const dbName = 'myproject';
// Use connect method to connect to the Server
MongoClient.connect(url, function(err, client) {
 assert.equal(null, err);
 console.log("Connected correctly to server");
 const db = client.db(dbName);
 create2dSphereIndex(db, function() {
 client.close();
 });
});

The following examples assume that a database called test has a collection called restaurants, with a 2d sphere index index on the address.coord field. A sample dataset is available for download.

$near

The $near operator specifies a set of longitude-latitude coordinates and returns documents from nearest to farthest.

function findDocuments(db, callback) {
 // Get the documents collection
 const collection = db.collection('restaurants');
 // Find some documents
 collection.find(
	{ 'address.coord':
	 { $near :
	 { $geometry:
	 { type: "Point", coordinates: [ -73.9667, 40.78 ] },
	 $maxDistance: 1000
	 }
	 }
	}
 ).toArray(function(err, docs) {
 assert.equal(err, null);
 console.log("Found the following records");
 console.log(docs);
 callback(docs);
 }); 
}
// use the findDocuments() function
const MongoClient = require('mongodb').MongoClient;
const assert = require('assert');
// Connection URL
const url = 'mongodb://localhost:27017';
// Database Name
const dbName = 'myproject';
// Use connect method to connect to the Server
MongoClient.connect(url, function(err, client) {
 assert.equal(null, err);
 console.log("Connected correctly to server");
 const db = client.db(dbName);
 findDocuments(db, function() {
 client.close();
 });
});

The $maxDistance option specifies a maximum distance (in meters) from the given coordinates. For a complete list of $near options, see the MongoDB manual.

$geoWithin

The $geoWithin operator selects documents with geospatial data that exist within a specified shape.

function findDocuments(db, callback) {
 // Get the documents collection
 const collection = db.collection('restaurants');
 // Find some documents
 collection.find(
 { 'address.coord':
 { $geoWithin:
 	 { $geometry:
 	 { type : "Polygon" ,
 coordinates: [ [ [ -73, 40 ], [ -74, 41 ], [ -72, 39 ], [ -73, 40 ] ] ]
 }
 }
 }
 }
 ).toArray(function(err, docs) {
 assert.equal(err, null);
 console.log("Found the following records");
 console.log(docs);
 callback(docs);
 }); 
}
// use the findDocuments() function
const MongoClient = require('mongodb').MongoClient;
const assert = require('assert');
// Connection URL
const url = 'mongodb://localhost:27017';
// Database Name
const dbName = 'myproject';
// Use connect method to connect to the Server
MongoClient.connect(url, function(err, client) {
 assert.equal(null, err);
 console.log("Connected correctly to server");
 const db = client.db(dbName);
 findDocuments(db, function() {
 client.close();
 });
});

AltStyle によって変換されたページ (->オリジナル) /