如何按其值之一

时间:2015-10-07 19:34:27

标签: parse-platform cloud-code

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

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

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

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

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

另一个想法是在我添加优惠券时对阵列进行排序,因此我总是可以弹出第一张优惠券并只获取该优惠券,而不是遍历所有优惠券。但是,这将要求我在添加优惠券时获取阵列中的所有优惠券,因此如果在查询中包含数组不使用额外请求,则在请求使用方面实际上它将是更有效的选项。

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

如果你有一些建议,我会非常感激。如果这类问题与政策有关,我也很抱歉,因为我要求就如何开始实施某些事情提出建议,而不是就如何解决我正在实施的问题提出建议。

感谢阅读,

杰克

1 个答案:

答案 0 :(得分:0)

在这种情况下,我完全远离阵列。没有必要使查询或数据模型与数组复杂化。

每个对象都有一个单独的Coupon对象,并包含一个指向适用者的User指针。然后,您所要做的就是查询所有指向用户的优惠券,按降序排序,然后进行设置。如果有优惠券,它将是最大的优惠券。

这种方法的一个缺点是可能会创建大量Coupon个对象,但这非常无关紧要。 Parse非常适合管理他们的数据库并对其进行正确的分片/分段以获得良好的性能。要限制在给定时间活动的优惠券数量,您还可以为每个优惠券添加到期日期,然后使用云后台作业定期清理过期的优惠券。

作为一般经验法则,专注于构建最佳用户体验比关注过度可扩展性要好得多。总的来说,可伸缩性问题很少发挥作用,因为大多数应用程序都失败了。不是说这是令人沮丧的;只需要记住一些事情,防止你在时间成本上陷入过度工程的陷阱:)