Node.js
Монгузская библиотека
Поиск…
Подключение к MongoDB Использование Mongoose
Во-первых, установите Mongoose с:
npm install mongoose
Затем добавьте его в server.js
как зависимости:
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
Затем создайте схему базы данных и имя коллекции:
var schemaName = new Schema({
request: String,
time: Number
}, {
collection: 'collectionName'
});
Создайте модель и подключитесь к базе данных:
var Model = mongoose.model('Model', schemaName);
mongoose.connect('mongodb://localhost:27017/dbName');
Затем запустите MongoDB и запустите server.js
используя node server.js
Чтобы проверить, успешно ли мы подключены к базе данных, мы можем использовать open
события, error
из объекта mongoose.connection
.
var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function() {
// we're connected!
});
Сохранение данных в MongoDB с использованием маршрутов Mongoose и Express.js
Настроить
Сначала установите необходимые пакеты с помощью:
npm install express cors mongoose
Код
Затем добавьте зависимости к файлу server.js
, создайте схему базы данных и имя коллекции, создайте сервер Express.js и подключитесь к 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);
});
Теперь добавьте маршруты Express.js, которые мы будем использовать для записи данных:
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)
}
})
})
Здесь переменная query
будет параметром <query>
из входящего HTTP-запроса, который будет сохранен в MongoDB:
var savedata = new Model({
'request': query,
//...
Если при попытке записи в MongoDB возникает ошибка, вы получите сообщение об ошибке на консоли. Если все будет успешным, вы увидите сохраненные данные в формате JSON на странице.
//...
}).save(function(err, result) {
if (err) throw err;
if(result) {
res.json(result)
}
})
//...
Теперь вам нужно запустить MongoDB и запустить файл server.js
используя node server.js
.
использование
Чтобы использовать это для сохранения данных, перейдите к следующему URL-адресу в своем браузере:
http://localhost:8080/save/<query>
Где <query>
- новый запрос, который вы хотите сохранить.
Пример:
http://localhost:8080/save/JavaScript%20is%20Awesome
Выход в формате JSON:
{
__v: 0,
request: "JavaScript is Awesome",
time: 1469411348,
_id: "57957014b93bc8640f2c78c4"
}
Поиск данных в MongoDB Использование маршрутов Mongoose и Express.js
Настроить
Сначала установите необходимые пакеты с помощью:
npm install express cors mongoose
Код
Затем добавьте зависимости к server.js
, создайте схему базы данных и имя коллекции, создайте сервер Express.js и подключитесь к 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);
});
Теперь добавьте маршруты Express.js, которые мы будем использовать для запроса данных:
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'
}))
}
})
})
Предположим, что следующие документы находятся в коллекции в модели:
{
"_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
}
И цель состоит в том, чтобы найти и отобразить все документы, содержащие "JavaScript is Awesome"
под ключом "request"
.
Для этого запустите MongoDB и запустите server.js
с node server.js
:
использование
Чтобы использовать это для поиска данных, перейдите по следующему URL-адресу в браузере:
http://localhost:8080/find/<query>
Где <query>
- поисковый запрос.
Пример:
http://localhost:8080/find/JavaScript%20is%20Awesome
Выход:
[{
_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
}]
Поиск данных в MongoDB Использование маршрутов Mongoose, Express.js и $ text Operator
Настроить
Сначала установите необходимые пакеты с помощью:
npm install express cors mongoose
Код
Затем добавьте зависимости к server.js
, создайте схему базы данных и имя коллекции, создайте сервер Express.js и подключитесь к 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);
});
Теперь добавьте маршруты Express.js, которые мы будем использовать для запроса данных:
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'
}))
}
})
})
Предположим, что следующие документы находятся в коллекции в модели:
{
"_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
}
И цель состоит в том, чтобы найти и отобразить все документы, содержащие только слово "JavaScript"
под ключом "request"
.
Для этого сначала создайте текстовый индекс для "request"
в коллекции. Для этого добавьте следующий код в server.js
:
schemaName.index({ request: 'text' });
И замените:
Model.find({
'request': query
}, function(err, result) {
С:
Model.find({
$text: {
$search: query
}
}, function(err, result) {
Здесь мы используем $text
и $search
MongoDB-операторы для поиска всех документов в коллекции collectionName
которое содержит хотя бы одно слово из указанного запроса на поиск.
использование
Чтобы использовать это для поиска данных, перейдите по следующему URL-адресу в браузере:
http://localhost:8080/find/<query>
Где <query>
- поисковый запрос.
Пример:
http://localhost:8080/find/JavaScript
Выход:
[{
_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
}]
Индексы в моделях.
MongoDB поддерживает вторичные индексы. В Mongoose мы определяем эти индексы в нашей схеме. Определение индексов на уровне схемы необходимо, когда нам нужно создавать составные индексы.
Соединение Mongoose
var strConnection = 'mongodb://localhost:27017/dbName';
var db = mongoose.createConnection(strConnection)
Создание базовой схемы
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;
По умолчанию mongoose добавляет два новых поля в нашу модель, даже если они не определены в модели. Эти поля:
_Я бы
Mongoose присваивает каждой из ваших схем поле _id по умолчанию, если он не передается в конструктор схемы. Назначенный тип - ObjectId, который совпадает с поведением MongoDB по умолчанию. Если вы не хотите, чтобы _id добавили в вашу схему вообще, вы можете отключить ее, используя эту опцию.
var usersSchema = new Schema({
username: {
type: String,
required: true,
unique: true
}, {
_id: false
});
__v или versionKey
VersionKey - это свойство, установленное для каждого документа при первом создании Mongoose. Это значение ключа содержит внутреннюю ревизию документа. Имя этого свойства документа настраивается.
Вы можете легко отключить это поле в конфигурации модели:
var usersSchema = new Schema({
username: {
type: String,
required: true,
unique: true
}, {
versionKey: false
});
Составные индексы
Мы можем создать еще один индекс, помимо того, что создает Mongoose.
usersSchema.index({username: 1 });
usersSchema.index({email: 1 });
В этом случае наша модель имеет еще два индекса: один для имени пользователя поля и другой для поля электронной почты. Но мы можем создавать составные индексы.
usersSchema.index({username: 1, email: 1 });
Влияние производительности индекса
По умолчанию mongoose всегда вызывает makeIndex для каждого индекса последовательно и генерирует событие «index» на модели, когда все вызовы secureIndex преуспели или когда произошла ошибка.
В MongoDB securityIndex устарел с версии 3.0.0, теперь является псевдонимом для createIndex.
Рекомендуется отключить поведение, установив для параметра autoIndex вашей схемы значение false или глобально на соединение, установив опцию config.autoIndex равным false.
usersSchema.set('autoIndex', false);
Полезные функции Мангуста
Mongoose содержит некоторые встроенные функции, которые основаны на стандартном 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
});
найти данные в mongodb, используя обещания
Настроить
Сначала установите необходимые пакеты с помощью:
npm install express cors mongoose
Код
Затем добавьте зависимости к server.js
, создайте схему базы данных и имя коллекции, создайте сервер Express.js и подключитесь к 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!');
});
Теперь добавьте маршруты Express.js, которые мы будем использовать для запроса данных:
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
})
Предположим, что следующие документы находятся в коллекции в модели:
{
"_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
}
И цель состоит в том, чтобы найти и отобразить все документы, содержащие "JavaScript is Awesome"
под ключом "request"
.
Для этого запустите MongoDB и запустите server.js
с node server.js
:
использование
Чтобы использовать это для поиска данных, перейдите по следующему URL-адресу в браузере:
http://localhost:8080/find/<query>
Где <query>
- поисковый запрос.
Пример:
http://localhost:8080/find/JavaScript%20is%20Awesome
Выход:
[{
_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
}]