First, install the necessary packages with:
npm install express cors mongoose
Then, add dependencies to server.js
, create the database schema and the name of the collection, create an Express.js server, and connect to MongoDB:
var express = require('express');
var cors = require('cors'); // We will use CORS to enable cross origin domain requests.
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var app = express();
var schemaName = new Schema({
request: String,
time: Number
}, {
collection: 'collectionName'
});
var Model = mongoose.model('Model', schemaName);
mongoose.connect('mongodb://localhost:27017/dbName');
var port = process.env.PORT || 8080;
app.listen(port, function() {
console.log('Node.js listening on port ' + port);
});
Now add Express.js routes that we will use to query the data:
app.get('/find/:query', cors(), function(req, res) {
var query = req.params.query;
Model.find({
'request': query
}, function(err, result) {
if (err) throw err;
if (result) {
res.json(result)
} else {
res.send(JSON.stringify({
error : 'Error'
}))
}
})
})
Assume that the following documents are in the collection in the model:
{
"_id" : ObjectId("578abe97522ad414b8eeb55a"),
"request" : "JavaScript is Awesome",
"time" : 1468710551
}
{
"_id" : ObjectId("578abe9b522ad414b8eeb55b"),
"request" : "JavaScript is Awesome",
"time" : 1468710555
}
{
"_id" : ObjectId("578abea0522ad414b8eeb55c"),
"request" : "JavaScript is Awesome",
"time" : 1468710560
}
And that the goal is to find and display all the documents containing only "JavaScript"
word under the "request"
key.
To do this, first create a text index for "request"
in the collection. For this, add the following code to server.js
:
schemaName.index({ request: 'text' });
And replace:
Model.find({
'request': query
}, function(err, result) {
With:
Model.find({
$text: {
$search: query
}
}, function(err, result) {
Here, we are using $text
and $search
MongoDB operators for find all documents in collection collectionName
which contains at least one word from the specified find query.
To use this to find data, go to the following URL in a browser:
http://localhost:8080/find/<query>
Where <query>
is the search query.
Example:
http://localhost:8080/find/JavaScript
Output:
[{
_id: "578abe97522ad414b8eeb55a",
request: "JavaScript is Awesome",
time: 1468710551,
__v: 0
},
{
_id: "578abe9b522ad414b8eeb55b",
request: "JavaScript is Awesome",
time: 1468710555,
__v: 0
},
{
_id: "578abea0522ad414b8eeb55c",
request: "JavaScript is Awesome",
time: 1468710560,
__v: 0
}]