Задача к лекции «Mongodb» – «Мультиварка»

Общие требования

Код должен проходить валидацию JSCS.

Задача

... шел пятый час, а Сергей все никак не мог сладить с этими монго-запросами! Как же это не просто запомнить что написать в начале: имя поля или оператор $lt? В это время с кухни донёсся отчётливый сигнал зуммера мультиварки, предвещающий вкусный обед. «А что, не плохая идея!» – подумал Сергей – «Мультиварка помогла мне решить проблему с приготовлением еды, почему бы не применить этот приницип к подготовке запросов к Mongodb».

Мультиварку Сергей решил написать на нативном драйвере, чтобы ничего личшнего! Следуя этому принципу он решил ограничить её возможности операциями: подключение к монге, выбор коллекции, формирование запроса и получение результата.

Например:

const multivarka = require('./multivarka');

multivarka
    // Указываем url для подключения
    .server('mongodb://localhost/urfu-2015')

    // и коллекцию
    .collection('students')

    // Выбираем только те записи, в которых поле `group` равно значению «ПИ-301».
    .where('group').equal('ПИ-301')

    // После подготовки, делаем запрос
    .find(function (err, data) {
        if (!err) {
            console.log(data);
        }
    });

В мультиварке запросов нам хочется видеть следующие функции:

  • .where('grade').lessThan(5) - запросить всех студентов, которые не очень постарались (оценка меньше 5)
  • .where('grade').greatThan(4) - запросить всех отличников (оценка больше 4)
  • .where('group').include(['ПИ-301', 'ПИ-302', 'КБ-301']) - запросить всех студентов из перечисленных групп
  • .where('group').not().equal('ПИ-301') - добавляет отрицание к следующему за этим оператором значению

Дополнительное задание

Будет нереально круто, если вы кроме кнопки find в мультиварке реализуете:

  • .remove(cb) - кнопка, которая удаляет студентов из коллекции
  • .set('group', 'ПИ-302').update(cb) - кнопка, которая обновляет данные студента
  • И кнопка, которая добавляет студента:
const petr = {
    name: 'Пётр',
    group: 'ПИ-302',
    grade: 5
}

multivarka
    // Указываем url для подключения
    .server('mongodb://localhost/urfu-2015')

    // и коллекцию
    .collection('students')

    // После подготовки, делаем запрос
    .insert(petr, function (err, result) {
        if (!err) {
            console.log(result);
        }
    });