Рубрики
Без рубрики

Начало работы с CAMO

Автор оригинала: Scott Robinson.

Редактировать : Обновленный код для Camo V0.12.1

Вступление

Прежде всего, Camo Это новый ODM на основе класса ES6 для Mongodb и узла. С Mainstream ES6 быстро приближается к нам, я думал, что мы долго просрочены для ODM, который воспользовался новыми функциями, поэтому я создал камуфляж. То, что мне больше всего беспокоило, при переходе от Java на JavaScript программирование было отсутствие классов в традиционном стиле. Я думаю, что для начинающих особенно это важная особенность для любого ОДМ.

В этом руководстве я покажу вам, как использовать основные функции CAMO (объявление схемы, сохранение, загрузка и т. Д.). Чтобы созревать с мангустом проще, я буду показывать аналогичные примеры к статье Начало работы с Mongoose Отказ Надеюсь, отсюда вы можете решить, какой стиль/функциональность вам нравится лучшее для использования в ваших проектах.

Подключение камО к MongoDB

Примечание : Код в этой статье использует v0.12.1 камуфляции

Чтобы подключить камуфляцию к вашей базе данных, просто пропустите строку подключения (обычно форма MongoDB://[IP-адрес]/[DB-name] ) к Подключиться () Способ, который вернет экземпляр клиента CAMO. Экземпляр клиента может использоваться для настройки БД, но не требуется для объявления, сохранения или удаления ваших документов.

var connect = require('camo').connect;
 
var database;
var uri = 'mongodb://localhost/test';
connect(uri).then(function(db) {
    database = db;
});

Схемы и модели

Модели являются заявил используя классы ES6 и должны продлить Документ объект. Схема модели объявляется в конструкторе, и любая переменная элемента, которая не запускается с подчеркивания ( _ ), включена в схему и сохраняется в БД. Переменная элемента может быть объявлена либо непосредственно назначать его типа, либо путем назначения объекта объекта с параметрами.

var Document = require('camo').Document;
 
class Movie extends Document {
    constructor() {
        super();

        this.title = String;
        this.rating = {
            type: String,
            choices: ['G', 'PG', 'PG-13', 'R']
        };
        this.releaseDate = Date;
        this.hasCreditCookie = Boolean;
    }

    static collectionName() {
        return 'movies';
    }
}

Имя коллекции объявляется путем переопределения статического CollectionName () метод. Хотя это имя редко нужно в коде, он станет полезным при проверке базы данных MongoDB вручную, так что лучше сохранить его отношение к имени модели.

Если CollectionName () Не предусмотрено, тогда CAMO автоматически назначит имя коллекции на основе имени класса.

Создать, извлекать, обновлять и удалять (CRUD)

Чтобы создать экземпляр модели, просто используйте Создать () Метод, который обрабатывает большую часть информирования для вас. Необязательно, данные могут быть переданы Создать () Это будет назначено для переменных членов. Если данные не передаются для переменной, то это либо назначено значение по умолчанию (если указано в схеме) или назначено null Отказ

var thor = Movie.create({
    title: 'Thor',
    rating: 'PG-13',
    releaseDate: new Date(2011, 4, 2),
    hasCreditCookie: true
});

thor.save().then(function(t) {
    console.log(thor);
});

Когда Сохранение Экземпляр, данные будут вставлены в базу данных, если она ранее не была сохранена. Если экземпляр уже был сохранен в базе данных, то существующий документ обновляется с изменениями.

К Удалить Документ, просто просто позвоните Удалить Метод на нем. Вы также можете использовать статические deleteone () , Делитеманы () или Yinkoneandddelete () на модель класса. Количество документов, удаленных из базы данных, будет возвращена в рамках Обещание Отказ

thor.delete().then(function(numDeleted) {
    console.log(numDeleted);
});

К нагрузка Документ из базы данных, у вас есть несколько вариантов в зависимости от того, что вы хотите сделать. Варианты:

  • findone () Для загрузки одного документа (или нуль, если не существует)
// Load only the 'Thor' movie
Movie.findOne({ title: 'Thor' }).then(function(movie) {
	console.log(thor);
});
  • Найти () Для загрузки нескольких документов (или пустой массив, если никто не существует)
// Load all movies that have a credit cookie
Movie.find({ hasCreditCookie: true }).then(function(movies) {
    console.log(thor);
});
  • indowoneanduppdate () для получения документа и обновления его в единую атомную работу
// Update 'Thor' to have a rating of 'R'
Movie.findOneAndUpdate({ title: 'Thor' }, { rating: 'R' }).then(function(movies) {
    console.log(thor);
});

Экстрас

Благодаря поддержке CAMO OF 6 классов ES6, мы можем легко определить статику, виртуальные и методы для моделей, что делает код модели гораздо более организованным и читаемым.

var Document = require('camo').Document;
 
class Movie extends Document {
    constructor() {
        super();

        // Schema declaration here...
    }

    set releaseYear(year) {
        this.releaseDate.setYear(year);
    }

    get releaseYear() {
        return this.releaseDate.getFullYear();
    }

    yearsOld() {
        return new Date().getFullYear() - this.releaseDate.getFullYear();
    }

    static findAllRMovies() {
        return this.find({ rating: 'R' });
    }
}

var uri = 'nedb://memory';

connect(uri).then(function(db) {
    var thor = Movie.create({
        title: 'The Matrix',
        rating: 'R',
        releaseDate: new Date(1999, 2, 31),
        hasCreditCookie: true
    });
    
    return thor.save();
}).then(function(t) {
    return Movie.findAllRMovies();
}).then(function(movies) {
    movies.forEach(function(m) {
        console.log(m.title + ': ' + m.releaseDate.getFullYear());
    });
});

В дополнение к взаимодействию с Mongodb Camo также поддерживает Недб , который похож на SQLite-эквивалент Монго. Пример использования NEDB показан выше. Очень полезно использовать во время разработки и тестирования, поскольку данные могут храниться в файле или просто памяти. Это также означает, что вы можете использовать камуфляж в переднем коде браузера!

Голова на Страница проекта для получения дополнительной информации. Как то, что вы видите? Звезда проекта и распространить слово!