Недавно я прочитал статью на Scotch.io, касающуюся использования Mongoose и MongoDB. Я подумал про себя: эй, Couchbase может сделать то же самое, если вы используете Ottoman вместо Mongoose.
В этой статье мы рассмотрим те же сравнения, что и в статье Scotch.io, но вместо Mongoose и MongoDB будем использовать Ottoman и Couchbase.
Что такое осман?
Ottoman для Couchbase — это средство отображения документов объектов (ODM), которое позволяет вам построить то, как будет выглядеть ваша объектная модель, а затем автоматически сгенерировать всю шаблонную логику, которая с ней связана.
Используйте Ottoman для легкого доступа к командам CRUD для Couchbase Server с помощью Node.js. Чтобы использовать Ottoman, обязательно добавьте его в свой проект Node.js, используя следующую команду:
npm install ottoman --save
Теперь, когда библиотеки загружены в наш проект, нам нужно включить их в наш исходный код. Это можно сделать, добавив следующее в один из ваших файлов JavaScript:
var ottoman = require("ottoman");
С османскими библиотеками, включенными в проект, нам теперь нужно дать Османской империи доступ к одному из наших блоков.
ottoman.bucket = (new couchbase.Cluster("http://localhost:8091")).openBucket("bucket-name-here");
Если вы ранее использовали Node.js SDK для Couchbase, вышеприведенное вам покажется знакомым. Мы просто подключаемся к кластеру, открываем ведро, а затем назначаем его Османской империи.
На этом этапе мы можем начать использовать Ottoman для ускорения процесса разработки.
Определение модели
Прежде чем мы сможем начать выполнять CRUD-операции против Couchbase, нам нужно определить нашу османскую модель. Эти модели представляют документы в нашей базе данных.
Модели, которые мы создаем с помощью Ottoman, могут иметь свойства и методы. Часть методов, к которой мы скоро доберемся, но пока проверим простые модели со свойствами.
Пример модели для пользователей
Давайте возьмем следующую модель для новых пользователей в нашем приложении (да, это просто в этом примере).
var UserModel = ottoman.model("User", {
firstname: {type: "string"},
lastname: {type: "string"},
email: {type: "string"},
created_at: {type: "Date", default: Date.now}
});
Теперь у нас есть модель, которую можно использовать так:
var myUser = new UserModel({
firstname: "Nic",
lastname: "Raboy",
email: "[email protected]"
});
Мы устанавливаем имя , фамилию и адрес электронной почты , но нам не нужно устанавливать значение create_at . Это потому, что по умолчанию, если мы не установим его, он будет установлен как текущая временная метка.
Пользовательские Методы
Допустим, мы хотим, чтобы метод выполнял непротиворечивую задачу в нашей модели. Возьмем, к примеру, следующее, предполагая, что мы уже создали наш простой объект UserModel.
UserModel.prototype.printWhoDaBoss = function() {
console.log(this.firstname + " " + this.lastname + " is Da Boss");
}
Теоретически, это напечатало бы имя и фамилию конкретной османской модели.
Пример использования для пользовательских методов
Чтобы использовать пользовательский метод, мы можем использовать printWhoDaBoss, как показано ранее, и сделать что-то вроде этого:
var myUser = new UserModel({
firstname: "Nic",
lastname: "Raboy",
email: "[email protected]"
});
myUser.printWhoDaBoss();
Вышеуказанное распечатало бы . Конечно, эта конкретная функция бесполезна, но вы можете использовать свое воображение, чтобы создать что-то лучшее с помощью этой концепции.
Запуск функции перед сохранением
Что если мы хотим выполнить задачу до того, как документ будет сохранен в Couchbase? Это может быть выполнено с использованием предварительно зарезервированного метода, который поставляется вместе с Ottoman. Например, скажем, мы хотим изменить фамилию каждого, прежде чем он будет сохранен:
UserModel.pre("save", function(next) {
this.lastname = "da Boss " + this.lastname;
next();
});
Теперь, когда кто-то пытается сохранить документ, который будет продемонстрирован в следующем разделе, его фамилия будет иметь префикс. Например, Рабой стал бы боссом Рабой . Не особенно полезно в этом случае, но вы должны понять.
Создание документа
Для создания документов нам нужно использовать встроенный метод сохранения Ottoman. С нашей моделью мы можем сделать что-то вроде этого:
var myUser = new UserModel({
firstname: "Nic",
lastname: "Raboy",
email: "[email protected]"
});
myUser.save(function(error) {
if(error) {
console.log("An error happened -> " + JSON.stringify(error));
}
console.log("Save successful!");
});
Ключ будет сгенерирован, а затем документ сохранен в базе данных.
Чтение документов NoSQL
Чтение документов с Ottoman немного отличается, потому что мы можем делать разные типы чтения. Давайте разберем несколько сценариев использования.
Поиск всех документов
В NoSQL часто бывает трудно получить документы, когда вы не знаете идентификатор документа. Без создания представления или использования технологии N1QL от Couchbase вам не повезет. Вот альтернатива.
UserModel.find({}, function(error, result) {
if(error) {
console.log("An error happened -> " + JSON.stringify(error));
}
// Do something with the resulting Ottoman models
});
Выше будет найти все документы, которые были созданы с помощью пользовательской модели Ottoman.
Поиск конкретного документа
Вот еще один сценарий. Допустим, вы не хотите каждый документ, и вы не знаете идентификатор документа. Вы можете сделать запрос с Ottoman, расширив команду find .
UserModel.find({lastname: "Raboy"}, function(error, result) {
if(error) {
console.log("An error happened -> " + JSON.stringify(error));
}
// Do something with the resulting Ottoman model
});
Найти документ по идентификатору
Допустим, вы знаете идентификатор документа, который вы хотите. Вы можете получить османскую модель, запустив:
UserModel.getById("document-id-here", function(error, result) {
if(error) {
console.log("An error happened -> " + JSON.stringify(error));
}
// Do something with the resulting Ottoman model
});
Это похоже на использование только метода get из Node.js SDK, однако вместо данных JSON, которые у вас остались, вместо этого у вас есть полностью функциональная османская модель.
Обновление существующего документа
Обновление документов с помощью Ottoman может быть немного сложнее, потому что вы должны сначала загрузить документ, прежде чем пытаться манипулировать им. Что вы можете сделать, это найти конкретный документ по идентификатору, а затем выполнить команду сохранения следующим образом:
UserModel.getById("document-id-here", function(error, result) {
if(error) {
console.log("An error happened -> " + JSON.stringify(error));
}
result.firstname = "Nicolas",
result.save(function(error) {
if(error) {
console.log("An error happened -> " + JSON.stringify(error));
}
});
});
В приведенном выше примере я сначала получил бы свою конкретную модель, изменил только ее имя, затем назвал save. Команда сохранения создаст или обновит, но это зависит от вас, чтобы привести к этой точке.
Удаление документа
Удаление документа будет работать аналогично обновлению документа с помощью Ottoman. Сначала вы должны загрузить документ, выполнив поиск, а затем вызвав функцию удаления . Простой пример этого можно увидеть ниже:
UserModel.getById("document-id-here", function(error, result) {
if(error) {
console.log("An error happened -> " + JSON.stringify(error));
}
result.remove(function(error) {
if(error) {
console.log("An error happened -> " + JSON.stringify(error));
}
console.log("Document was removed!");
});
});
Вывод
Ottoman — отличный инструмент ODM для Couchbase, который моделирует наши объекты и прекрасно подходит для операций типа CRUD. Mongoose для MongoDB пытается быть похожим на Османского, как показано в статье на Scotch.io относительно Mongoose и MongoDB. Эта статья была призвана показать, как Ottoman так же прост, если не проще в использовании.