Так что я решил сделать, так как код выглядел бы беспорядочно, чтобы бросить все внутри Artist.find({})
, это создать отдельную вспомогательную функцию:
const buildQuery = (criteria) => {
console.log(criteria);
};
Эта вспомогательная функция вызывается с помощью criteria
. ] и я должен сформировать объект таким образом, чтобы он представлял запрос так, как я хочу искать в коллекции Artist
.
Что мешало мне обернуть голову, был не очень хорошо сформированный объект для поиска в коллекции со своими случайными свойствами, такими как age
, у которой есть мин и максимум, которые Монго не знает, как разобраться с по умолчанию. MongoDB не знает, что именно означают мин и макс.
Итак, внутри вспомогательной функции я сделал отдельный объект для return
из этой функции, которая будет представлять фактический query
, который я хочу отправить Монго.
const buildQuery = (criteria) => {
console.log(criteria);
const query = {};
};
В любом случае я не изменяю объект, я просто читаю некоторые из желаемых результатов поиска или то, что пользователь хочет видеть из этого объекта пользовательского интерфейса, и поэтому я сделал этот объект с именем query
и добавил Идея age
.
const buildQuery = (criteria) => {
console.log(criteria);
const query = {};
query.age = {};
};
Я решил сделать if
условную внутри вспомогательной функции для определенного возрастного диапазона, который я хочу найти.
const buildQuery = (criteria) => {
console.log(criteria);
const query = {};
if (criteria.age) {
query.age = {};
}
};
Так что именно здесь вступают в игру операторы запросов Монго. Два оператора, с которыми я хочу поработать, это операторы, большие или равные ($gte
), и операторы, меньшие или равные ($lte
).
Вот как я на самом деле реализовал это на практике:
const buildQuery = (criteria) => {
console.log(criteria);
const query = {};
if (criteria.age) {
query.age = {
$gte: criteria.age.min,
$lte: criteria.age.max
};
}
};
Объект query
здесь в конечном итоге будет возвращен из функции buildQuery
:
const buildQuery = (criteria) => {
console.log(criteria);
const query = {};
if (criteria.age) {
query.age = {
$gte: criteria.age.min,
$lte: criteria.age.max
};
}
return query;
};
То query
] объект будет передан в операцию поиска:
module.exports = (criteria, sortProperty, offset = 0, limit = 20) => {
// write a query that will follow sort, offset, limit options only
// do not worry about criteria yet
const query = Artist.find(buildQuery(criteria))
.sort({ [sortProperty]: 1 })
.skip(offset)
.limit(limit);
return Promise.all([query, Artist.count]).then(results => {
return {
all: results[0],
count: results[1],
offset: offset,
limit: limit
};
});
};
const buildQuery = (criteria) => {
console.log(criteria);
const query = {};
if (criteria.age) {
query.age = {
$gte: criteria.age.min,
$lte: criteria.age.max
};
}
return query;
};
Итак, что я делаю здесь, чтобы получить эквивалент Artist.find({ age: { $gte: minAge, $lte: maxAge })
.
Итак, для yearsActive
я решил реализовать нечто почти идентичное:
const buildQuery = criteria => {
console.log(criteria);
const query = {};
if (criteria.age) {
query.age = {
$gte: criteria.age.min,
$lte: criteria.age.max
};
}
if (criteria.yearsActive) {
}
return query;
};
Так что, если пользователь меняет ползунок, я буду ожидать, что у моего объекта критериев будет определено свойство yearsActive, определенное для это так:
const buildQuery = criteria => {
console.log(criteria);
const query = {};
if (criteria.age) {
query.age = {
$gte: criteria.age.min,
$lte: criteria.age.max
};
}
if (criteria.yearsActive) {
query.yearsActive = {
$gte: criteria.yearsActive.min,
$lte: criteria.yearsActive.max
}
}
return query;
};
Разработка Lotus Notes началась более чем 20 лет назад, с версия 1, выпущенная в 1989 . Это было разработано Ray Ozzie, в настоящее время Главным Архитектором программного обеспечения для Microsoft.
Lotus Notes (клиент) и Domino (сервер) был вокруг в течение долгого времени и является зрелыми хорошо представляемыми продуктами. Это имеет:
Назад совместимость всегда была сильной чертой Domino Примечаний, и весьма распространено найти базы данных, которые были разработаны для версии 3, работающей безупречно в самых актуальных версиях. IBM помещает огромное усилие в это, и она имеет большое влияние, как продукт в настоящее время работает.
-
CouchDB был создан Damien Katz, стартовая разработка в 2004. Он ранее работал на IBM на Domino Примечаний, разрабатывая шаблоны и в конечном счете полностью переписывая одну из базовых функций, механизма формулы, для ND6.
CouchDB совместно использует фундаментальное понятие ориентированной базы данных документа с представлениями, что Domino Примечаний имеет.
В этот образцовые "документы" являются просто произвольными наборами значений, которые хранятся некоторые как. В CouchDB документы являются объектами JSON произвольной сложности. В Примечаниях значения являются простыми парами значение-имя, где значения могут быть строками, числами, датами или массивами тех.
Представления являются индексами документов в базе данных, отображая определенное значение, вычисляя других и, исключая нежелательные документы. Как только индекс является сборкой, они инкрементно обновляются когда любой документ в изменениях базы данных (созданный обновленный или удаленный).
В представлениях CouchDB сборка путем выполнения отображающейся функции на каждом документе в базе данных. Отображающиеся вызовы функции испускать метод с JSON возражает для каждого элемента индекса, что хочет создать для данного документа. Этот объект JSON может быть произвольно сложным. CouchDB может тогда выполнить вторую уменьшающую функцию на отображенном индексе представления.
В представлениях Domino Примечаний создаются путем выполнения избранной функции (записанный на языке формулы Domino Примечаний) на каждом документе в базе данных. Избранная функция просто определяет, если документ должен быть в представлении или нет. Дизайн представления Domino примечаний также определяет многие столбцы для представления. Каждый столбец имеет формулу, которая выполняется против выбранного документа для определения значения для того столбца.
CouchDB в состоянии произвести намного более сложные индексы представления, чем Domino Примечаний может.
CouchDB также имеет систему репликации.
-
Сводка ( TL; DR): CouchDB является совершенно новым программным обеспечением, которое разрабатывает ядро, которое имеет подобный концептуальный, но намного более сложный дизайн к используемому в Domino Lotus Notes. Domino Lotus Notes является зрелым полнофункциональным продуктом, который способен к тому, чтобы быть развернутым сегодня. CouchDB запускается с нуля, создавая прочную основу для будущей разработки комплекта. Domino Lotus Notes продолжает разрабатывать новые возможности, но делает так на 20-летней платформе, которая стремится поддержать назад совместимость. Существуют функции в Domino Примечаний, которого Вы могли бы пожелать, были в CouchDB, но существуют также функции в Domino Примечаний, которые анахроничны в современном мире.
Существует интервью подкаста с Jan Lehnardt команды CouchDB здесь .
, не возвращаясь и слушая его снова, я полагаю, что Damien Katz, который был инициатором и является все еще ведущим разработчиком на CouchDB, был также парнем позади базы данных Notes. Таким образом, существует смысл, в котором CouchDB является лучшим DB Примечаний, я предполагаю. Он объясняет некоторые различия в его блог .
Damien Katz работал в Iris (Lotus), но он не был парнем позади Базы данных Примечаний. Он известен в сообществе Lotus Notes за перепроектирование Механизма Формулы Примечаний.
Существуют определенно некоторые общие черты между CouchDB и Lotus Notes, такие как их ориентированные на документ, нереляционные данные и возможности репликации, но они являются более разрозненными, чем подобный. CouchDB является сервером базы данных, и Lotus Notes является платформой сотрудничества уровня предприятия.
Сервер клиента/Domino Lotus Notes состоит из объекта ("документ") - устройство хранения данных (не реляционный) механизм, полностью интегрировал основанную на сертификате модель обеспечения безопасности / управление пользователями и разрешение конфликтов для синхронизации офлайновых/онлайн изменений в данных - это - платформа для распределенных приложений.
" CouchDB является ориентированным на документ, Сервер управления Нереляционной базы данных (NRDBMS). "
CouchDB доступен через API стиля REST.
Это - приложение Примечаний и UI, который обычно ненавидят люди. Не архитектура позади.
Это подобно тому, как Примечания имеют дело с данными, в которых все - документ произвольной структуры, и у Вас есть представления по тем документам вместо таблиц и записей как, Вы имели бы в реляционной базе данных. Репликация и т.д. также имеет некоторые общие черты.
Нет ничего плохого с серверной архитектурой Примечаний, люди не ненавидят это так. Это - больше реализация, и чрезмерно увеличьтесь в размерах, который идет с Примечаниями.
CouchDB не имеет никакого фронтэнда также, просто серверный компонент. Клиент Примечаний сосет, и именно это ДЕЙСТВИТЕЛЬНО ненавидят люди. Вы когда-либо пытались послать по электронной почте мм, я имею в виду "заметку" что-то из Примечаний? Не приятный :(
@Lex, Возможно, вы должны сказать, над какой версией Notes / Domino вы работаете, потому что ваши комментарии неверны.
«Нет поддержки транзакций» - Domino имеет ведение журнала транзакций. Если вам нужен более сложный журнал транзакций, который также доступен в кодировании.
«не подходит для обработки нескольких транзакций с данными» - на самом деле он справляется с ними отлично. У вас есть блокировка документов и разрешение конфликтов репликации. Во многом зависит от того, как вы настроили приложение для обработки рабочего процесса.
«Нет разделения между производственной средой и средой разработки». - Ложь. Единственный способ, которым это могло быть правдой, - это если у вас плохо развернутая среда. Разработчики обычно не должны иметь доступа для развертывания изменений проекта в производственной среде. Они будут работать по шаблону, который не копируется на главные серверы. После того, как обновления выполнены и утверждены, администратор развертывает их. Они делают это, беря шаблон и подписывая его контролируемой подписью, разрешенной для работы в производственной среде, затем вставляют шаблон и обновляют дизайн связанных приложений.
«Чем больше данных в Lotus Notes, тем больше просмотров будет создано» - этот комментарий не имеет абсолютно никакого смысла. Я не верю, что вы использовали Notes / Domino в каких-либо профессиональных целях.
«Сценарий лотоса не является объектно-ориентированным» - Да, вы здесь хорошо заметили. Однако это не означает, что язык ошибочен. Также они внесли большое количество улучшений начиная с 8.x и 8.5.1. Например, встроенная поддержка веб-сервисов (укажите WSDL и код LS создан для вас). 8.5.1 Также имеется много новых функций дизайнера, таких как шаблоны кода, автозаполнение, всплывающая справка LSDoc по вашим собственным функциям и т. Д.
Вы также касаетесь только LotusScript. Но вы также можете ввести код: Java, SSJS / DOJO (XPages), Javascript, язык @Formula, веб-службы (SOAP / REST), C-API, плагины Eclipse (RCP). Вывод в формате JSON, а также XML.
8.5.1 Клиент Designer теперь можно загрузить бесплатно, если вы хотите его протестировать.
Так что, хотя я считаю, что я не в состоянии комментировать CouchDb, вы определенно не пользуетесь Notes / Domino.