我的Parse数据库中有一个表,其中包含validFrom和uniqueId列。可以有多个具有相同uniqueId(如名称)的记录
对于给定的uniqueIds集,我必须使用什么查询来获取具有最新validFrom的项目?我尝试了以下但是这限制了我的搜索到整个集合的1项而不是每个unique_id记录1项:
var UpdateObject = Parse.Object.extend("UpdateObject");
var query = new Parse.Query(UpdateObject);
query.containedIn("unique_id", uniqueIdsArray).select('status', 'unique_id').descending("validFrom").limit(1);
答案 0 :(得分:1)
查询语义是有限的,因此唯一的方法是查询超集并将结果操作到您需要的内容。最好在服务器上完成,以限制额外对象的传输。
大警告:用铅笔和纸做过这个,而不是运行parse.app,所以这可能是错的。但最重要的是获取所有uniqueIds的所有匹配对象,按uniqueId对它们进行分组,然后为每个组返回一个具有最大validFrom日期的对象...
function updateObjectsInSet(uniqueIdsArray ) {
var query = new Parse.Query("UpdateObject");
// find all of the UpdateObjects with the given ids
query.containedIn("unique_id", uniqueIdsArray);
query.limit(1000);
return query.find().then(function(allUpdates) {
// group the result by id
var byId = _.groupBy(allUpdates, function(update) { return update.get("unique_id"); });
// for each group, select the newest validFrom date
return _.map(byId, function (updates) {
_.max(updates, function(update) { return -update.get("validFrom").getTime(); });
});
});
}
要将其放入云中,只需将其包裹起来:
Parse.Cloud.define("updateObjectsInSet", function(request, response) {
updateObjectsInSet(request.params.uniqueIdsArray).then(function(result) {
response.success(result);
}, function(error) {
response.error(error);
});
});
然后使用来自客户端的Parse.Cloud.run()
来调用它。