Node.js
Mongoose Library
Sök…
Anslut till MongoDB med Mongoose
Installera Mongoose först med:
npm install mongoose
Lägg sedan till den till server.js
som beroenden:
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
Skapa sedan databasschemat och namnet på samlingen:
var schemaName = new Schema({
request: String,
time: Number
}, {
collection: 'collectionName'
});
Skapa en modell och anslut till databasen:
var Model = mongoose.model('Model', schemaName);
mongoose.connect('mongodb://localhost:27017/dbName');
server.js
MongoDB och kör server.js
med node server.js
För att kontrollera om vi har anslutit oss till databasen kan vi använda händelserna open
, error
från mongoose.connection
objektet.
var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function() {
// we're connected!
});
Spara data på MongoDB med Mongoose- och Express.js-rutter
Uppstart
Först installerar du nödvändiga paket med:
npm install express cors mongoose
Koda
Lägg sedan till beroenden till din server.js
fil, skapa databasschemat och namnet på samlingen, skapa en Express.js-server och anslut till 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);
});
Lägg nu till Express.js-rutter som vi kommer att använda för att skriva data:
app.get('/save/:query', cors(), function(req, res) {
var query = req.params.query;
var savedata = new Model({
'request': query,
'time': Math.floor(Date.now() / 1000) // Time of save the data in unix timestamp format
}).save(function(err, result) {
if (err) throw err;
if(result) {
res.json(result)
}
})
})
Här kommer query
att vara <query>
-parametern från den inkommande HTTP-begäran, som kommer att sparas i MongoDB:
var savedata = new Model({
'request': query,
//...
Om ett fel uppstår när du försöker skriva till MongoDB får du ett felmeddelande på konsolen. Om allt är framgångsrikt ser du sparade data i JSON-format på sidan.
//...
}).save(function(err, result) {
if (err) throw err;
if(result) {
res.json(result)
}
})
//...
Nu måste du starta MongoDB och köra din server.js
fil med node server.js
.
Användande
För att använda detta för att spara data, gå till följande URL i din webbläsare:
http://localhost:8080/save/<query>
Där <query>
är den nya begäran du vill spara.
Exempel:
http://localhost:8080/save/JavaScript%20is%20Awesome
Utgång i JSON-format:
{
__v: 0,
request: "JavaScript is Awesome",
time: 1469411348,
_id: "57957014b93bc8640f2c78c4"
}
Hitta data i MongoDB med hjälp av Mongoose- och Express.js-rutter
Uppstart
Först installerar du nödvändiga paket med:
npm install express cors mongoose
Koda
Lägg sedan till beroenden till server.js
, skapa databasschemat och namnet på samlingen, skapa en Express.js-server och anslut till 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);
});
Lägg nu till Express.js-rutter som vi kommer att använda för att fråga informationen:
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'
}))
}
})
})
Antag att följande dokument finns i samlingen i modellen:
{
"_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
}
Och målet är att hitta och visa alla dokument som innehåller "JavaScript is Awesome"
under "request"
-nyckeln.
För detta startar du MongoDB och kör server.js
med node server.js
:
Användande
För att använda detta för att hitta data, gå till följande URL i en webbläsare:
http://localhost:8080/find/<query>
Där <query>
är sökfrågan.
Exempel:
http://localhost:8080/find/JavaScript%20is%20Awesome
Produktion:
[{
_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
}]
Hitta data i MongoDB med hjälp av Mongoose, Express.js-rutter och $ textoperatör
Uppstart
Först installerar du nödvändiga paket med:
npm install express cors mongoose
Koda
Lägg sedan till beroenden till server.js
, skapa databasschemat och namnet på samlingen, skapa en Express.js-server och anslut till 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);
});
Lägg nu till Express.js-rutter som vi kommer att använda för att fråga informationen:
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'
}))
}
})
})
Antag att följande dokument finns i samlingen i modellen:
{
"_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
}
Och att målet är att hitta och visa alla dokument som bara innehåller "JavaScript"
-ord under "request"
-nyckeln.
För att göra detta, skapar du först ett textindex för "request"
i samlingen. För detta lägger du till följande kod i server.js
:
schemaName.index({ request: 'text' });
Och ersätt:
Model.find({
'request': query
}, function(err, result) {
Med:
Model.find({
$text: {
$search: query
}
}, function(err, result) {
Här använder vi $text
och $search
MongoDB-operatörer för att hitta alla dokument i samlingssamlingen collectionName
som innehåller minst ett ord från den angivna sökfrågan.
Användande
För att använda detta för att hitta data, gå till följande URL i en webbläsare:
http://localhost:8080/find/<query>
Där <query>
är sökfrågan.
Exempel:
http://localhost:8080/find/JavaScript
Produktion:
[{
_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
}]
Index i modeller.
MongoDB stöder sekundära index. I Mongoose definierar vi dessa index inom vårt schema. Att definiera index på schemanivå är nödvändigt när vi behöver skapa sammansatta index.
Mongoose Connection
var strConnection = 'mongodb://localhost:27017/dbName';
var db = mongoose.createConnection(strConnection)
Skapa ett grundläggande schema
var Schema = require('mongoose').Schema;
var usersSchema = new Schema({
username: {
type: String,
required: true,
unique: true
},
email: {
type: String,
required: true
},
password: {
type: String,
required: true
},
created: {
type: Date,
default: Date.now
}
});
var usersModel = db.model('users', usersSchema);
module.exports = usersModel;
Som standard lägger mongoose till två nya fält i vår modell, även om de inte definieras i modellen. Dessa fält är:
_id
Mongoose tilldelar varje schema ett _id-fält som standard om ett inte skickas in i Schema-konstruktören. Den tilldelade typen är en ObjectId som sammanfaller med MongoDBs standardbeteende. Om du inte vill att ett _id läggs till i ditt schema alls, kan du inaktivera det med det här alternativet.
var usersSchema = new Schema({
username: {
type: String,
required: true,
unique: true
}, {
_id: false
});
__v eller versionKey
VersionKey är en egenskap som är inställd på varje dokument när den först skapades av Mongoose. Detta nyckelvärde innehåller den interna revisionen av dokumentet. Namnet på denna dokumentegenskap kan konfigureras.
Du kan enkelt inaktivera det här fältet i modellkonfigurationen:
var usersSchema = new Schema({
username: {
type: String,
required: true,
unique: true
}, {
versionKey: false
});
Compound index
Vi kan skapa ytterligare index utöver de som Mongoose skapar.
usersSchema.index({username: 1 });
usersSchema.index({email: 1 });
I dessa fall har vår modell ytterligare två index, en för fältets användarnamn och en annan för e-postfält. Men vi kan skapa sammansatta index.
usersSchema.index({username: 1, email: 1 });
Inverkan på indexets prestanda
Som standard ringer mongoose alltid versekerIndex för varje index i följd och avger en "index" -händelse på modellen när alla sikreIndex-samtal lyckades eller när det uppstod ett fel.
I MongoDB försvåras att InIndex avskrivs sedan version 3.0.0, nu är ett alias för createIndex.
Rekommenderas inaktivera beteendet genom att ställa in autoIndex-alternativet för ditt schema till falskt, eller globalt på anslutningen genom att ställa in alternativet config.autoIndex till falsk.
usersSchema.set('autoIndex', false);
Användbara Mongoose-funktioner
Mongoose innehåller några inbyggda funktioner som bygger på standardfyndet find()
.
doc.find({'some.value':5},function(err,docs){
//returns array docs
});
doc.findOne({'some.value':5},function(err,doc){
//returns document doc
});
doc.findById(obj._id,function(err,doc){
//returns document doc
});
hitta data i mongodb med löften
Uppstart
Först installerar du nödvändiga paket med:
npm install express cors mongoose
Koda
Lägg sedan till beroenden till server.js
, skapa databasschemat och namnet på samlingen, skapa en Express.js-server och anslut till 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);
});
app.use(function(err, req, res, next) {
console.error(err.stack);
res.status(500).send('Something broke!');
});
app.use(function(req, res, next) {
res.status(404).send('Sorry cant find that!');
});
Lägg nu till Express.js-rutter som vi kommer att använda för att fråga informationen:
app.get('/find/:query', cors(), function(req, res, next) {
var query = req.params.query;
Model.find({
'request': query
})
.exec() //remember to add exec, queries have a .then attribute but aren't promises
.then(function(result) {
if (result) {
res.json(result)
} else {
next() //pass to 404 handler
}
})
.catch(next) //pass to error handler
})
Antag att följande dokument finns i samlingen i modellen:
{
"_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
}
Och målet är att hitta och visa alla dokument som innehåller "JavaScript is Awesome"
under "request"
-nyckeln.
För detta startar du MongoDB och kör server.js
med node server.js
:
Användande
För att använda detta för att hitta data, gå till följande URL i en webbläsare:
http://localhost:8080/find/<query>
Där <query>
är sökfrågan.
Exempel:
http://localhost:8080/find/JavaScript%20is%20Awesome
Produktion:
[{
_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
}]