使用ParseQuery获取从列表中找到的第一个项目

时间:2015-05-19 14:54:44

标签: parse-platform

我想查询Parse,以便按给定列表的顺序检索给定列表中找到的第一个对象。

我的代码看起来非常像这样:

query = getQuery(MyClass.class).whereContainedIn("FieldName", itemList);
networkQuery.getFirstInBackground(...);

我需要的是,特别是检索列表中找到的第一个项目,这意味着如果我按升序提供一个数字列表,我希望检索与之对应的对象最小数量可能。

我不确定这是getFirstInBackground()是如何工作的,我知道它会取得一个结果,但我怎样才能确保根据我提供的列表顺序进行搜索?

2 个答案:

答案 0 :(得分:0)

自己在itemList中找到最小值,并使用equalTo对查询进行限定。

// is this javascript?  if so, underscorejs is very useful
var _ = require('underscore');

var minItem = _.min(itemList);  // you can add an optional iteratee function that can minimize any computation over the list

query.equalTo("FieldName", minItem);
query.getFirstInBackground(...);

修改 Parse.Query排序仅适用于可排序类型,如字符串和数字。问题中希望的顺序是数组属性的min()值。如果这样的东西可用,那么getFirst查询就可以了。

您仍然可以使用find()完成所需的工作。由于少量行将包含在itemList中的FieldName值,因此您可以执行find()并从这些少量结果中选出最小值...

query.find().then(function(results) {
    return _.min(results, function(result) {
        return result.get("FieldName");
    });
});

答案 1 :(得分:0)

您必须使用 - orderByAscending(或降序,我无法记住)方法订购您的查询。它采用列名参数。

所以简单易懂(但我确定你已经明白了)是通过提升"年龄" (例子),你在数组中的第一个结果将是最小的年龄。

订购查询后,只需为其设置-limit即可。它是查询将返回的结果数,如果您只想要五个第一,则设置限制为5.或20.最大值为1000。

如果您还想跳过3个第一个结果,因为您知道它们并不感兴趣(我只是在这里详细说明您的问题和范围),您可以使用 - skip方法,跳过前X个结果。

这应该可以帮助您构建查询。设置所有这些参数,然后执行查询,您就会得到正确的结果。

编辑:重新阅读您的问题后,我不确定我是否回答了您的问题。请详细说明我是不是。