我想问一下您对在expressjs + mongodb(mongoose)Web应用程序上对对象进行排序的最佳实践的想法。
假设我的产品模型具有四个属性:
var ProductSchema = new mongoose.Schema({
name: String, // "Summer T-shirt"
price: Number, // 100
salefrom: Date, // ISODate("2018-12-25T10:15:25.338Z")
colors: [String] // "red", "blue", "black"
});
在产品列表页面上,我要实现以下排序功能:
我认为有几种方法可以实现它。您认为最佳做法是什么?
首先,我尝试了此解决方案。
对于最新排序和最便宜的排序,mongoose.find()。sort()非常易于使用,且编码较少。
但是,mongoose.sort()不能完成颜色变化排序(因为它不能按array.length进行排序),所以我不得不使用另一种方法:mongoose.aggregate()
接下来,我尝试了此解决方案。
首先使用mongoose.find()获取产品数组,然后使用compare()使用Array.prototype.sort()函数对产品进行排序,例如:
function compare(a,b) {
if (a.colors.length < b.colors.length)
return -1;
if (a.colors.length > b.colors.length)
return 1;
return 0;
}
我认为此解决方案非常灵活,我可以创建更复杂的排序函数,而mongodb(mongoose)内置方法无法做到这一点。
但是,与该解决方案A相比,使用此解决方案我必须编写很多代码。
老实说,我没有尝试过这种解决方案,但是由于javascript是服务器端和客户端的一种语言,因此我认为这是排序的选项。
从性能,灵活性和可维护性的角度来看,您认为哪种解决方案是最好的?
请分享我的想法。
答案 0 :(得分:0)
由于您要提出意见。.试图分享我在此类应用程序中的经验。 :)
.sort()
对值进行排序,并且效果很好。有些地方我不使用mongo的.sort()
,但是我使用Javascript对结果进行排序。这有两点-Array.prototype.sort()
或其他方法可以提供帮助。
a。您将数据带到浏览器并排序/或执行其他操作。简而言之,请使用客户端(浏览器)资源。这是
b。您无法将数据带到客户端,并且需要在进行一些过滤后仅显示其中的一部分。但是排序/其他操作需要完整的数据。在这种情况下,您可以将排序/其他操作保留在NodeJS代码内,并将结果仅带到客户端。
a点可帮助您利用客户端资源。我会尽可能使用它。