我想查询Parse,以便按给定列表的顺序检索给定列表中找到的第一个对象。
我的代码看起来非常像这样:
query = getQuery(MyClass.class).whereContainedIn("FieldName", itemList);
networkQuery.getFirstInBackground(...);
我需要的是,特别是检索列表中找到的第一个项目,这意味着如果我按升序提供一个数字列表,我希望检索与之对应的对象最小数量可能。
我不确定这是getFirstInBackground()
是如何工作的,我知道它会取得一个结果,但我怎样才能确保根据我提供的列表顺序进行搜索?
答案 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个结果。
这应该可以帮助您构建查询。设置所有这些参数,然后执行查询,您就会得到正确的结果。
编辑:重新阅读您的问题后,我不确定我是否回答了您的问题。请详细说明我是不是。