2014-10-02 88 views
0

我正在使用Parse.com API进行移动应用程序,并且担心NoSQL数据库建模。Parse.com上的左侧加入

语境: 我有类EstablishmentUser,我希望我的用户可以收藏的Establishment。但我无法为此功能更改Establishment本身。所以我将引用保存到另一个地方(JoinTable或用户的属性作为数组)。

问题: 问题是我的应用程序通过10获得了应用程序分页,并且它必须首先显示用户最喜欢的机构。但是建立并不知道用户的喜好。

所以,假设我们有一个用户有3个机构喜欢。我怎样才能得到一个请求10个机构与前3个作为我的用户的最爱? P.S:下一个请求会返回10个我的用户不喜欢的单位。

回答

1

我想我已经得到妥善解决:

所有的 - 首先创建Parse.com用户类的一个数组里面列;本专栏将用于存储所有最喜欢的机构。在这个数组中,你可以编写所有的建立标识,像这样(作为字符串):[EstablishmentId0,EstablishmentId1,EstablishmentId2]

- 当你做一个查询来获得所有的建立,你会得到一个ArrayList,按id标识当前的用户收藏夹阵列。如果某些元素与您的Array ID匹配,请将其放在列表顶部。因此,结果将是列表顶部的三个收藏夹中的10个元素的列表。

希望它有帮助! 问候,

1

对于一个长期的解决方案,我认为你应该创建一个名为另一个类喜欢其中包含2指针FROMUSERtoEstablishment。然后你就可以像下面执行查询:

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数据。

0

上面提到的两种解决方案得到了我的+1,因为我认为它们非常好,但我相信可以做更好的事情。

从我所看到的,你的服务器不需要知道用户是否喜欢某个机构。只有客户需要知道这一点。一旦我知道这样的事情,我立即知道我要在本地工作100%,而不是将这种信息存储在服务器上(并使用我的配额请求,数据,电池等)。

现在我假设你的应用程序中有一个数据库,可以定期更新自己的服务器上的任何内容(如果你不这样做,我建议你这样做,但那不是重点)。我会做的只是在你的机构中添加一个布尔属性“isFavourite”,并且当你在本地加载它们时,检查它是否是本地的,并在必要时将其放在0节(或顶部):)

允许您更快,更有效地工作,并且仍然可以完成您的工作。

如果你没有数据库,你可以采用效率较低的方法,并将你的收藏夹存储在NSUserDefaults(例如ID数组)中。由于UserDefaults是在你的应用程序开始时加载的,而不是在需要的时候加载,所以它有点愚蠢,它并不适用于那种存储,但它同样适用。

注:我强烈建议您使用类似于您的解析数据库的数据库,因此您可以随时在使用应用程序时加载本地内容(这是非常简单和快速的),并且每次只更新一次一段时间(例如用户启动应用程序时)。这样,您的用户可以脱机阅读,快速加载,也可以通过这种方式添加“本地”属性。例如自定义设置,用户想要添加的私人场所,“笔记”等等任何想到的东西:)