在保存之前解析重复的行保存之后
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 类的指针 访问日期
组由 placeId 和 dateOfVisit 标识(它们将构成主键)。
例如:
placeId dateOfVisit 111111111 2015-06-13 16:00 111111111 2015-06-14 16:00
当用户想要加入 placeId:1111111111 和 dateOfVisit: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 + 后台作业
我完全不在乎重复的条目AfterSave 在 createdAt 列上按升序执行 query.first equalTo(请求中的 placeId 和 dateOfVisit),并返回此 groupId 并将其保存以用于加入请求。 后台作业会定期删除除 min.createdAt 条目之外的所有重复条目。
这些听起来是不是有点矫枉过正? 任何建议表示赞赏!谢谢。
【问题讨论】:
【参考方案1】:beforeSave
和afterSave
不需要同时生成,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)
以上是关于在保存之前解析重复的行保存之后的主要内容,如果未能解决你的问题,请参考以下文章
Android 中Canvas的save(),saveLayer()和restore()解析