Node.js
Mongoes Bibliotheek
Zoeken…
Maak verbinding met MongoDB via Mongoose
Installeer eerst Mongoose met:
npm install mongoose
Voeg het vervolgens toe aan server.js
als afhankelijkheden:
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
Maak vervolgens het databaseschema en de naam van de verzameling:
var schemaName = new Schema({
request: String,
time: Number
}, {
collection: 'collectionName'
});
Maak een model en maak verbinding met de database:
var Model = mongoose.model('Model', schemaName);
mongoose.connect('mongodb://localhost:27017/dbName');
Start vervolgens MongoDB en voer server.js
met node server.js
Om te controleren of we met succes verbinding hebben gemaakt met de database, kunnen we de open
gebeurtenissen gebruiken, error
van het mongoose.connection
object.
var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function() {
// we're connected!
});
Gegevens opslaan in MongoDB met behulp van Mongoose en Express.js Routes
Opstelling
Installeer eerst de benodigde pakketten met:
npm install express cors mongoose
Code
Voeg vervolgens afhankelijkheden toe aan uw server.js
bestand, maak het databaseschema en de naam van de collectie, maak een Express.js-server en maak verbinding met 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);
});
Voeg nu Express.js-routes toe die we zullen gebruiken om de gegevens te schrijven:
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)
}
})
})
Hier is de query
de parameter <query>
van het inkomende HTTP-verzoek, die wordt opgeslagen in MongoDB:
var savedata = new Model({
'request': query,
//...
Als er een fout optreedt tijdens het schrijven naar MongoDB, ontvangt u een foutbericht op de console. Als alles succesvol is, ziet u de opgeslagen gegevens in JSON-indeling op de pagina.
//...
}).save(function(err, result) {
if (err) throw err;
if(result) {
res.json(result)
}
})
//...
Nu moet u MongoDB starten en uw server.js
bestand uitvoeren met node server.js
.
Gebruik
Om dit te gebruiken om gegevens op te slaan, gaat u naar de volgende URL in uw browser:
http://localhost:8080/save/<query>
Waarbij <query>
het nieuwe verzoek is dat u wilt opslaan.
Voorbeeld:
http://localhost:8080/save/JavaScript%20is%20Awesome
Uitvoer in JSON-indeling:
{
__v: 0,
request: "JavaScript is Awesome",
time: 1469411348,
_id: "57957014b93bc8640f2c78c4"
}
Vind gegevens in MongoDB met behulp van Mongoose en Express.js Routes
Opstelling
Installeer eerst de benodigde pakketten met:
npm install express cors mongoose
Code
Voeg vervolgens afhankelijkheden toe aan server.js
, maak het databaseschema en de naam van de collectie, maak een Express.js-server en maak verbinding met 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);
});
Voeg nu Express.js-routes toe die we zullen gebruiken om de gegevens op te vragen:
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'
}))
}
})
})
Stel dat de volgende documenten zich in de verzameling in het model bevinden:
{
"_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
}
En het doel is om alle documenten met "JavaScript is Awesome"
te vinden en weer te geven onder de toets "request"
.
Start hiervoor MongoDB en voer server.js
met node server.js
:
Gebruik
Om dit te gebruiken om gegevens te vinden, gaat u naar de volgende URL in een browser:
http://localhost:8080/find/<query>
Waar <query>
de zoekopdracht is.
Voorbeeld:
http://localhost:8080/find/JavaScript%20is%20Awesome
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
}]
Vind gegevens in MongoDB met behulp van Mongoose, Express.js Routes en $ text Operator
Opstelling
Installeer eerst de benodigde pakketten met:
npm install express cors mongoose
Code
Voeg vervolgens afhankelijkheden toe aan server.js
, maak het databaseschema en de naam van de collectie, maak een Express.js-server en maak verbinding met 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);
});
Voeg nu Express.js-routes toe die we zullen gebruiken om de gegevens op te vragen:
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'
}))
}
})
})
Stel dat de volgende documenten zich in de verzameling in het model bevinden:
{
"_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
}
En dat het doel is om alle documenten te vinden en weer te geven die alleen het woord "JavaScript"
onder de sleutel "request"
.
Maak hiervoor eerst een tekstindex voor "request"
in de verzameling. Voeg hiervoor de volgende code toe aan server.js
:
schemaName.index({ request: 'text' });
En vervangen:
Model.find({
'request': query
}, function(err, result) {
Met:
Model.find({
$text: {
$search: query
}
}, function(err, result) {
Hier gebruiken we $text
en $search
MongoDB-operatoren om alle documenten in de collection collectionName
die ten minste één woord uit de opgegeven zoekopdracht bevatten.
Gebruik
Om dit te gebruiken om gegevens te vinden, gaat u naar de volgende URL in een browser:
http://localhost:8080/find/<query>
Waar <query>
de zoekopdracht is.
Voorbeeld:
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
}]
Indexen in modellen.
MongoDB ondersteunt secundaire indexen. In Mongoose definiëren we deze indexen binnen ons schema. Het definiëren van indexen op schemaniveau is nodig wanneer we samengestelde indexen moeten maken.
Mongoose-verbinding
var strConnection = 'mongodb://localhost:27017/dbName';
var db = mongoose.createConnection(strConnection)
Een basisschema maken
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;
Standaard voegt mangoest twee nieuwe velden toe aan ons model, zelfs als deze niet in het model zijn gedefinieerd. Die velden zijn:
_ID kaart
Mongoose wijst elk van uw schema's standaard een _id-veld toe als er geen wordt doorgegeven aan de Schema-constructor. Het toegewezen type is een ObjectId dat samenvalt met het standaardgedrag van MongoDB. Als u helemaal geen _id aan uw schema wilt toevoegen, kunt u deze met deze optie uitschakelen.
var usersSchema = new Schema({
username: {
type: String,
required: true,
unique: true
}, {
_id: false
});
__v of versionKey
De versionKey is een eigenschap die op elk document is ingesteld wanneer deze voor het eerst werd gemaakt door Mongoose. Deze sleutelwaarde bevat de interne revisie van het document. De naam van deze documenteigenschap kan worden geconfigureerd.
U kunt dit veld eenvoudig uitschakelen in de modelconfiguratie:
var usersSchema = new Schema({
username: {
type: String,
required: true,
unique: true
}, {
versionKey: false
});
Samengestelde indexen
We kunnen nog andere indexen maken dan die Mongoose maakt.
usersSchema.index({username: 1 });
usersSchema.index({email: 1 });
In dit geval heeft ons model nog twee indexen, een voor de veldgebruikersnaam en een voor het e-mailveld. Maar we kunnen samengestelde indexen maken.
usersSchema.index({username: 1, email: 1 });
Impact op indexprestaties
Standaard roept mongoose altijd de sureIndex voor elke index opeenvolgend op en zendt een 'index'-gebeurtenis uit op het model wanneer alle aanroepen van sureIndex zijn geslaagd of wanneer er een fout is opgetreden.
In MongoDB zorgt ervoor datIndex is gedeprecieerd sinds versie 3.0.0, nu is het een alias voor createIndex.
Aanbevolen wordt om het gedrag uit te schakelen door de optie autoIndex van uw schema in te stellen op false of globaal op de verbinding door de optie config.autoIndex in te stellen op false.
usersSchema.set('autoIndex', false);
Handige Mongoose-functies
Mongoes bevat een aantal ingebouwde functies die voortbouwen op de standaard 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
});
vind gegevens in mongodb met behulp van beloften
Opstelling
Installeer eerst de benodigde pakketten met:
npm install express cors mongoose
Code
Voeg vervolgens afhankelijkheden toe aan server.js
, maak het databaseschema en de naam van de collectie, maak een Express.js-server en maak verbinding met 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!');
});
Voeg nu Express.js-routes toe die we zullen gebruiken om de gegevens op te vragen:
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
})
Stel dat de volgende documenten zich in de verzameling in het model bevinden:
{
"_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
}
En het doel is om alle documenten met "JavaScript is Awesome"
te vinden en weer te geven onder de toets "request"
.
Start hiervoor MongoDB en voer server.js
met node server.js
:
Gebruik
Om dit te gebruiken om gegevens te vinden, gaat u naar de volgende URL in een browser:
http://localhost:8080/find/<query>
Waar <query>
de zoekopdracht is.
Voorbeeld:
http://localhost:8080/find/JavaScript%20is%20Awesome
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
}]