Таким образом, приведенный выше ответ является лучшим решением, поскольку он является ES6 и более элегантным.Я хотел рассказать о старом школьном образе ES5, который я изучил после того, как получил этот ответ, и изучил его более подробно.
Я понял, что в ES5 вы можете определить объект следующим образом:
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 sortOrder = {};
Artist.find({})
.sort()
.skip(offset)
.limit(limit);
};
Я сделал его пустым объектом, а затем посмотрел на него и добавил sortProperty
равно 1
примерно так:
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 sortOrder = {};
sortOrder[sortProperty] = 1;
Artist.find({})
.sort()
.skip(offset)
.limit(limit);
};
И тогда я могу передать sortOrder
примерно так:
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 sortOrder = {};
sortOrder[sortProperty] = 1;
Artist.find({})
.sort(sortOrder)
.skip(offset)
.limit(limit);
};
Хорошо, таков подход ES5, если кто-то заинтересован в его изучении, но, как вы можете видеть выше, решение ES6 выглядит лучше.
Вся проблема с созданиемобъект и одновременное добавление к нему свойства заключается в том, что он плохо поддерживается в ES5, мы должны сначала объявить объект, затем добавить к нему свойство и установить это свойство равным 1.
Квадратные скобки означают внешний видв переменной sortProperty
:
sortOrder[sortProperty] = 1;
, которая является строкой, и я пытаюсь добавить к этому объекту sortOrder
свойство name
и установить его равным 1
, и поэтомуконечный результат, если вы запустили это в консоли Chrome или яФрагмент кода n: { name: 1 }
.
Кривая обучения для меня и то, что выбранный ответ помог мне узнать, были интерполированные свойства или ключи ES6.Эта вещь:
.sort({ [sortProperty]: 1 })
То, что происходит здесь, это то, что во время выполнения посмотрите на переменную sortProperty
и независимо от того, что она равна, добавьте это свойство к этому объекту и присвойте ему значение 1
.
Итак, чтобы быть ясным, да, первоначальный ответ был элегантным решением, с которым я пошел:
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
Artist.find()
.sort({ [sortProperty]: 1 })
.skip(offset)
.limit(limit);
};
Я просто поделился тем, что узнал в процессе изучения и реализации.