Introduction Link to heading

MongoDB is a popular NoSQL database that offers powerful geo-spatial features for location-based applications. geo-spatial indexes allow efficient storage and querying of geographic data, enabling developers to build location-aware functionality. In this blog post, we will explore how to use MongoDB geo-spatial indexes in a Node.js application. We will cover the setup, indexing, and querying of geo-spatial data.

Prerequisites Link to heading

Before we begin, ensure that you have the following prerequisites:

  • Node.js and npm (Node Package Manager) installed on your machine
  • MongoDB server running locally or accessible remotely

Setting Up the Node.js Application Link to heading

Initialize a new Node.js project and install the required dependencies:

mkdir geo-spatial-app
cd geo-spatial-app
npm init -y
npm install express mongodb

Create an index.js file and import the necessary modules:

const express = require("express");
const { MongoClient } = require("mongodb");

const app = express();
const port = 3000;

// MongoDB connection configuration
const uri = "mongodb://localhost:27017";
const client = new MongoClient(uri);

// Express server setup
app.listen(port, () => {
  console.log(`Server is running on http://localhost:${port}`);
});

Creating a geo-spatial Index Link to heading

To enable geo-spatial querying, we need to create a geo-spatial index on a specific field. Here’s an example of creating a 2D sphere index:

// Inside the MongoDB connection setup
client.connect((err) => {
  if (err) {
    console.error("Error connecting to MongoDB:", err);
    return;
  }

  const db = client.db("geospatialDB");
  const collection = db.collection("locations");

  // Creating a 2D sphere index
  collection
    .createIndex({ location: "2dsphere" })
    .then(() => {
      console.log("Geospatial index created successfully");
    })
    .catch((error) => {
      console.error("Error creating geospatial index:", error);
    });
});

Querying Geospatial Data Link to heading

Once the geospatial index is created, we can perform geospatial queries. Here’s an example of finding documents within a certain radius:

// Inside an Express route handler
app.get("/locations", async (req, res) => {
  const { longitude, latitude, radius } = req.query;

  try {
    const db = client.db("geospatialDB");
    const collection = db.collection("locations");

    // Querying documents within a specified radius
    const result = await collection
      .find({
        location: {
          $near: {
            $geometry: {
              type: "Point",
              coordinates: [parseFloat(longitude), parseFloat(latitude)],
            },
            $maxDistance: parseFloat(radius),
          },
        },
      })
      .toArray();

    res.json(result);
  } catch (error) {
    console.error("Error querying geospatial data:", error);
    res.status(500).json({ error: "An error occurred" });
  }
});

MongoDB geospatial indexes provide an excellent solution for handling location-based data in your Node.js applications. By leveraging these capabilities, you can build powerful location-aware features such as finding nearby places, displaying points of interest on maps, and more.