如何按其中一个值对 Parse 指针数组进行排序

How to sort an array of Parse pointers by one of their values

我使用 Parse 作为我的后端,使用 Stripe 作为我的支付 API。不幸的是,Stripe 没有我需要的优惠券功能,所以我自己在 Parse 上实现了它。

我为每个用户都有一个 Coupons 对象,该对象包含一个用户已兑换的所有 Coupon 对象的数组。当他们通过我的应用程序请求服务时,我希望它从该数组中弹出价值最高的优惠券。

我当前的解决方案效率极低而且不是动态的,三个优惠券值中的每一个都有单独的数组,我检查每个数组以查看它是否为空,然后再继续下一个或弹出其中一个优惠券对象。

我想尽量减少它使用的请求数,以便更好地扩展。

我必须获取 Coupons 对象,所以我的第一个想法是以某种方式在该获取中包含优惠券数组,有点像查询的 include() 方法。但是,我没有看到 fetch 的功能。当我键入此内容时,我记得您可以使用 query.find() 来获取特定对象,因此我将尝试这样做而不是设置 objectId 并调用 fetch,并使用 .include () 方法。这是对我的优惠券数组的每个对象使用额外的请求,还是对查询使用一个请求?我什至可以 .include() 一个 属性 是一个指针数组吗?如果这样做,我只需要遍历优惠券以确定哪一张具有最大价值,然后从数组中删除那一张。

另一个想法是在我向数组添加优惠券时保持数组排序,这样我将始终能够弹出第一张优惠券并只获取那一张,而不是遍历所有优惠券。但是,这将要求我在添加优惠券时获取数组中的所有优惠券,因此如果在查询中包含数组不使用额外请求,就请求使用而言,它实际上是更有效的选择。

我正在研究的第三个想法涉及基于优惠券数组执行查询并按值键降序排序。但是,我不确定如何设置该查询。它会是 query.containedIn("objectId", couponArray),其中 couponArray 是指向 Coupon 对象的指针数组,而 query 是对 Coupon 对象的查询吗?然后我可以使用 query.first() 来获取对象,我相信查询只会使用一个请求。

如果您对以后有什么建议,我将不胜感激。如果此类问题有点违反政策,我也深表歉意,因为我是在征求有关如何开始实施某些内容的建议,而不是有关如何修复我正在实施的某些内容的建议。

感谢阅读,

杰克

在这种情况下,我会完全远离数组。无需使用数组使查询或数据模型复杂化。

每个都有一个单独的 Coupon 对象,并包含一个指向适用对象的 User 指针。然后您所要做的就是查询所有指向用户的优惠券,按降序排序,然后就可以了。有优惠券的先给大的。

此方法的一个缺点可能是创建大量 Coupon 对象,但这无关紧要。 Parse 非常擅长管理他们的数据库,并且正确地 sharding/segmenting 它以获得良好的性能。要限制在给定时间激活的优惠券数量,您还可以为每张优惠券添加到期日期,然后使用云后台作业定期清理过期优惠券。

作为一般经验法则,专注于构建尽可能最佳的用户体验比过度关注可伸缩性要好得多。总的来说,可伸缩性问题很少出现,因为大多数应用程序都会失败。不是说令人沮丧;只是要记住并防止您以时间为代价陷入过度工程的陷阱:)