所以以上的答案是最好的解决方案,因为它是ES6和更优雅。我想和大家分享我在得到这个答案后学到的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。
方括号表示
变量:
sortOrder[sortProperty] = 1;
这是一个字符串,我试图添加
财产
name
设置为
因此,如果在Chrome控制台或代码片段中运行此命令,最终结果是
{ name: 1 }
.
.sort({ [sortProperty]: 1 })
这里发生的是在运行时查看
排序属性
变量及其等于的值,将该属性添加到此对象,并将其值设置为
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);
};
我只是分享我在学习和实施过程中学到的东西。