在保存之前解析重复的行保存之后

Posted

技术标签:

【中文标题】在保存之前解析重复的行保存之后【英文标题】:Parse duplicate rows beforeSave afterSave 【发布时间】:2015-06-12 11:12:32 【问题描述】:

我是解析 sdk 的新手,但这是我一直在苦苦挣扎的情况。 我正在使用 android 客户端和一些 CloudCode 功能。

我有 2 个类 Joins 和 Groups。

Joins(存储每个加入请求)

userId - 指向 _User 类的指针 人数 groupId - 指向组的指针

Groups(标识一个组)

placeId - 指向 Place 类的指针 访问日期

组由 placeIddateOfVisit 标识(它们将构成主键)。

例如:

placeId dateOfVisit 111111111 2015-06-13 16:00 111111111 2015-06-14 16:00

当用户想要加入 placeId:1111111111dateOfVisit:2015-06-14 16:00 我想检查是否有现有组或我需要创建一个新组并将这个 groupId 分配给这个加入请求。

我已阅读解析文档,由于缺少事务/系统锁,无法在组中创建唯一行,但是有一些解决方法。

解决方案1:beforeSave + afterSave

将在组上创建一个 beforeSave 和一个 aftersave 挂钩 JS 方法。BeforeSave 将检查 - 如果已经存在一个组(请求中有 placeId 和 dateOfVisit),则什么也不做 - 否则保存/创建一个新组。AfterSave 会 在 createdAt 列上按升序执行 query.first equalTo(请求中的 placeId 和 dateOfVisit),并返回此 groupId 并将其保存以用于加入请求。

解决方案2:afterSave + 后台作业

我完全不在乎重复的条目AfterSavecreatedAt 列上按升序执行 query.first equalTo(请求中的 placeId 和 dateOfVisit),并返回此 groupId 并将其保存以用于加入请求。 后台作业会定期删除除 min.createdAt 条目之外的所有重复条目。

这些听起来是不是有点矫枉过正? 任何建议表示赞赏!谢谢。

【问题讨论】:

【参考方案1】:

beforeSaveafterSave 不需要同时生成,beforeSave 就足够了。

在您的云代码中,定义一个beforeSave 函数:

使用equalTo("placeId", placeId)Groups 类检查是否存在现有组。 如果结果返回null,您可以创建一个新的Group并分配与原始请求一起发送的userId。否则,将userId 与返回的对象相关联。

查看有关云代码here 的更多信息,您可能还需要了解Promises

【讨论】:

感谢您的回答。组由 placeId 和 dateOfVisit 标识。据此,您基本上建议使用带有查询 equalTo(placeId) 和 equalTo(dateOfVisit) 的 beforeSave 足以检查现有组? 是的,如果 dateOfVisit 是您的群组标识符 不,我希望组标识符是解析生成的 objectId。所以我不想创建重复的条目。或者我误解了你的评论...... 那么你可以使用equalTo("objectId",ID_OF_YOUR_GROUP)

以上是关于在保存之前解析重复的行保存之后的主要内容,如果未能解决你的问题,请参考以下文章

保存要解析的图像数组[重复]

如何在保存之前对Emacs中更改的行执行操作?

Android 中Canvas的save(),saveLayer()和restore()解析

数据未保存:对象引用了未保存的瞬态实例 - 在刷新之前保存瞬态实例 [重复]

对象引用未保存的瞬态实例:在刷新之前保存瞬态实例[重复]

实现主从块金额汇总