建筑从 - 到关系NoSql

时间:2014-12-12 14:58:50

标签: java android parse-platform nosql-aggregation nosql

我在Parse.com文档中遇到了这个架构问题。 我有以下" schema",名为Debit:

"createdAt": "2014-12-12T02:31:06.026Z",
"creator": {
    "__type": "Pointer",
    "className": "_User",
    "objectId": "objectId"
},
"date": {
    "__type": "Date",
    "iso": "2014-12-12T02:31:14.437Z"
},
"debitStatus": 0,
"description": "Gdfvgg",
"from": {
    "__type": "Pointer",
    "className": "_User",
    "objectId": "Sd9B1XyZVL"
},
"has_accepted": false,
"objectId": "objectId",
"to": {
    "__type": "Pointer",
    "className": "_User",
    "objectId": "objectId"
},
"updatedAt": "2014-12-12T06:00:46.528Z",
"value": "6.48"

来自"列"是指向_User表的指针。问题是,在我的Android应用中,我想根据记录用户显示fromto借记,但我的适配器只显示"未记录的用户&# 34;用户。

我尝试对Parse进行or查询以获取所有借记查询但我无法包含用户指针,因为在or查询Parse不支持。

像这样:

ParseQuery<ParseObject> query1 = new ParseQuery<ParseObject>("UserBalance");
query1.whereEqualTo("user_from", ParseUser.getCurrentUser());
ParseQuery<ParseObject> query2 = new ParseQuery<ParseObject>("UserBalance");
query2.whereEqualTo("user_to", ParseUser.getCurrentUser());

ParseQuery<ParseObject> query = ParseQuery.or(Arrays.asList(query1, query2));

但问题是在显示&#34;而不是我&#34;适配器:

适配器:

 ParseUser user = null;
 ParseUser user1 = (ParseUser) object.get("user_to");
 if (user1 == ParseUser.getCurrentUser())
     user = (ParseUser) object.get("user_from");
 else
     user = user1;

当然我需要获取用户,在适配器中这不是一个好主意。那么,在数据库方面是否有更好的方法来改进这一点?

由于

1 个答案:

答案 0 :(得分:0)

Parse是一个数据库,API将向您发送数据库中的记录。如果您想要计算&#34;其他方&#34;您可以创建Parse.com cloud function。您在Parse.com一侧的交易。该功能将由当前用户提供,并且可以使用完整的JavaScript API,因此应该可以使用。

但这对我来说似乎有些过分。他们的示例将许多评论行的信息聚合到一个评级中,这应该加快结果的传输。在您的情况下,您计算一个新列,您也可以在客户端计算,就像您一样。

因此,我认为您目前的方法没有任何问题。我认为,展示&#34;其他方&#34;是你的适配器的工作并不奇怪。我称之为视图逻辑,是如何向用户显示数据的选择。因此,如果适配器需要显示&#34;其他方&#34;,那么适配器需要知道要过滤掉的两个用户中的哪一个。

要将事情分开一点,您可以在适配器类中创建一个currentUser字段并将其填充到构造函数中或使用setter。然后适配器不需要调用ParseUser.getCurrentUser()本身。例如,这可以帮助您为适配器创建单元测试。

如果您希望其余代码更加独立于Parse.com,您可以创建某种数据访问对象来计算&#34;其他方&#34;列并将数据转换为nonParse.com对象。对我来说,这似乎是一种不同的矫枉过正。