解析服务器 - 如何在单个查询中查找查询字段并将其替换为另一个 table 的字段
Parse Server - How to lookup and replace a field of a query with field from another table in a single query
我无法在 Parse Server 上找到以下问题的解决方案。相当于在SQL中使用JOIN但是因为Parse Server使用NoSQL,所以解决方案不是join.
问题;
报告屏幕显示查询结果。但是其中一个字段需要从另一个 class 中查找并替换为另一个 class.
中的字段
我只能通过两个单独的嵌套查询来解决这个问题,但这效率不高。
您能否告诉我如何在单个查询中或更有效地执行以下操作;
//get query result from database
ParseQuery<ParseObject> query = ParseQuery.getQuery("access");
query.whereStartsWith("tokenid", "prefix");
query.findInBackground(new FindCallback<ParseObject>() {
@Override
public void done(List<ParseObject> objects, ParseException e) {
for (int i=0; i<objects.size(); i++) {
String reportField1 = objects.get(i).getString("name");
String lookup = objects.get(i).getString("cityID");
//start the second query
ParseQuery<ParseObject> query2 = ParseQuery.getQuery("cities");
query2.whereEqualTo("cityID", lookup);
query2.getFirstInBackground(new GetCallback<ParseObject>() {
@Override
public void done(ParseObject object, ParseException e) {
String reportField2 = object.getString("cityname");
}
});
}
}
});
您要查找的内容在 Parse 中称为 pointer
。不要将 cityID
存储在 access
对象上,而是存储指向 cities
对象的指针并将其包含在查询中。
这是来自 Android guide
的示例
ParseQuery<ParseObject> query = ParseQuery.getQuery("Comment");
// Retrieve the most recent ones
query.orderByDescending("createdAt");
// Only retrieve the last ten
query.setLimit(10);
// Include the post data with each comment
query.include("post");
query.findInBackground(new FindCallback<ParseObject>() {
public void done(List<ParseObject> commentList, ParseException e) {
// commentList now contains the last ten comments, and the "post"
// field has been populated. For example:
for (ParseObject comment : commentList) {
// This does not require a network access.
ParseObject post = comment.getParseObject("post");
Log.d("post", "retrieved a related post");
}
}
});
通过在 access
对象上存储一个指针,您只需将其包含在查询中即可获得相应的 cities
对象。
我无法在 Parse Server 上找到以下问题的解决方案。相当于在SQL中使用JOIN但是因为Parse Server使用NoSQL,所以解决方案不是join.
问题; 报告屏幕显示查询结果。但是其中一个字段需要从另一个 class 中查找并替换为另一个 class.
中的字段我只能通过两个单独的嵌套查询来解决这个问题,但这效率不高。 您能否告诉我如何在单个查询中或更有效地执行以下操作;
//get query result from database
ParseQuery<ParseObject> query = ParseQuery.getQuery("access");
query.whereStartsWith("tokenid", "prefix");
query.findInBackground(new FindCallback<ParseObject>() {
@Override
public void done(List<ParseObject> objects, ParseException e) {
for (int i=0; i<objects.size(); i++) {
String reportField1 = objects.get(i).getString("name");
String lookup = objects.get(i).getString("cityID");
//start the second query
ParseQuery<ParseObject> query2 = ParseQuery.getQuery("cities");
query2.whereEqualTo("cityID", lookup);
query2.getFirstInBackground(new GetCallback<ParseObject>() {
@Override
public void done(ParseObject object, ParseException e) {
String reportField2 = object.getString("cityname");
}
});
}
}
});
您要查找的内容在 Parse 中称为 pointer
。不要将 cityID
存储在 access
对象上,而是存储指向 cities
对象的指针并将其包含在查询中。
这是来自 Android guide
的示例ParseQuery<ParseObject> query = ParseQuery.getQuery("Comment");
// Retrieve the most recent ones
query.orderByDescending("createdAt");
// Only retrieve the last ten
query.setLimit(10);
// Include the post data with each comment
query.include("post");
query.findInBackground(new FindCallback<ParseObject>() {
public void done(List<ParseObject> commentList, ParseException e) {
// commentList now contains the last ten comments, and the "post"
// field has been populated. For example:
for (ParseObject comment : commentList) {
// This does not require a network access.
ParseObject post = comment.getParseObject("post");
Log.d("post", "retrieved a related post");
}
}
});
通过在 access
对象上存储一个指针,您只需将其包含在查询中即可获得相应的 cities
对象。