mongo-search
mongo-search copied to clipboard
Fuzzy Text Search And Autocompletion With MongoDB And Node.js
MongoDB Text Search With Node.js
Fuzzy Text Search And Autocompletion With MongoDB And Node.js
![](https://github.com/flolu/mongo-search/raw/main/.github/preview.gif)
Features
- Exact match text search with self-deployed MongoDB
- Fuzzy text search with MongoDB Atlas
- Text autocompletion
- Sort search results by score
- Search through multiple text fields
- Limit search results to specific country code
- Populate database with fake users
- Small user interface for searching
Tech Stack
- Node.js
- TypeScript
- Docker
- Self-deployed MongoDB or MongoDB Atlas
Usage
Recommended OS: Linux
Requirements: Node.js, Docker
Setup
-
npm install
(Install NPM dependencies for server)
Self Deployed Search
-
docker-compose -f docker-compose.yml up --build
(Start services) -
npx ts-node fake-data.ts .env.local
(Add fake data to MongoDB) -
mongodb://admin:password@localhost:27017
(MongoDB Compass connection URI) - http://localhost:3000/search?query=gilbert (Basic search)
MongoDB Atlas Search
- Create MongoDB Atlas cluster
- Create a user with password and set
MONGODB_USERNAME
andMONGODB_PASSWORD
in.env.atlas
- Create API Key for your project
- Go to Project Settings
- Select Access Manager
- Select API Keys
- Create API Key
- Set Project Permissions to Project Search Index Editor
- Set
MONGODB_ATLAS_PUBLIC_KEY
andMONGODB_ATLAS_PRIVATE_KEY
in.env.atlas
-
docker-compose -f docker-compose.yml up --build
(Start services) -
npx ts-node fake-data.ts .env.atlas
(Add fake data to MongoDB) - http://localhost:3001/search?query=gilbert (Fuzzy search)
User interface
-
cd client && npm install
(Install NPM dependencies for client) -
cd client && npm run dev
(Start user interface in development mode, http://localhost:4000)
Cleanup
-
docker-compose -f docker-compose.yml rm -s -f -v
(Stop and remove Docker containers)
Codebase
-
self-deployed-api.ts
(Node.js API to fetch search results from self-deployed MongoDB) -
atlas-api.ts
(Node.js API to fetch search results from MongoDB Atlas, which has more features) -
fake-data.ts
(Script to populate MongoDB with fake data) -
util.ts
(Utilities for TypeScript and MongoDB)