我正在使用Parse.com API for Mobile应用程序,我担心NoSQL数据库建模。
上下文
我有课程Establishment
和User
,我希望我的用户能够收藏Establishment
。但我不能为此功能更改Establishment
本身。所以我将引用保存到另一个地方(JoinTable或User的属性作为数组)。
问题: 问题是我的应用程序获得10个10分页的分页,并且它必须首先显示用户最喜欢的机构。但是,Establishment并不知道用户的喜欢。
所以,假设我们有一个有3个场所的用户。如何在一个请求中获得10个场所,其中前3个作为我的用户的最爱? P.S:下一个请求将返回10个我的用户不喜欢的机构。
答案 0 :(得分:1)
我认为我有适当的解决方案:
- 首先在Parse.com的User类中创建一个Array列;此列将用于存储所有喜爱的机构。在这个数组中,您可以编写所有的建立ID,如此(如字符串):[EstablishmentId0,EstablishmentId1,EstablishmentId2]
- 当您执行查询以获取所有建立时,您将获得一个ArrayList,因此请按ID将每个元素与当前用户收藏夹数组进行比较。如果某个元素与您的数组ID匹配,请将其放在列表顶部。因此,结果将是一个包含10个元素的列表,其中您的三个收藏夹位于列表顶部。
希望它有所帮助! 的问候,
答案 1 :(得分:1)
对于长期解决方案,我认为您应该创建另一个名为喜欢的类,其中包含2个指针 fromUser 和 toEstablishment 。然后,您可以执行如下查询:
var Likes = Parse.Object.extend("Likes");
var currentUser = Parse.User.current();
var likesQuery = Parse.Query(Likes);
likesQuery.limit(10);
likesQuery.equalTo("fromUser",currentUser);
likesQuery.find({
success: function(results){
}
});
从长远来看,我的意思是您可以在 toEstablishment 列中使用指针对象,例如,使用include查询在此查询中获取更多Establishment
数据。
答案 2 :(得分:0)
上面提到的两个解决方案得到了+1,因为我认为它们非常好,但我相信可以做得更好。
从我看到的情况来看,您的服务器不需要知道用户是否喜欢某个机构。只有客户需要知道这一点。一旦我知道这样的事情,我立即知道我将100%本地工作,而不是在服务器上存储这种信息(并用尽我的请求,数据,电池等配额)。
现在我假设您的应用中有一个数据库,可以定期更新服务器上的任何内容(如果您不这样做,我建议您这样做,但这不是重点)。我要做的只是在您的机构上添加一个布尔属性“isFavourite”,当您在本地加载它们时,检查它是否是本地的,并在必要时将其放在第0部分(或顶部):)
这使您可以更快,更有效地工作,并且仍然可以完成您的工作。
如果您没有数据库,则可以采用效率较低的方式将您的收藏夹存储在NSUserDefaults中(ID数组)。由于UserDefaults是在应用程序启动时加载的,而不是在需要时加载它有点傻,而且它不适用于那种存储,但它也可以正常工作。
注意:我强烈建议您使用类似于您的解析数据库的数据库,因此您可以随时在使用应用程序时加载本地内容(这是非常简单和快速的),并且每次只更新一次while(当用户启动应用程序时)。这样,您的用户可以离线阅读,快速加载疯狂,您也可以通过这种方式添加“本地”属性。例如自定义设置,用户想要添加的私人场所,“笔记”等。任何想到的东西:)