在Parse.com JS查询中获取每个字段的最新记录

时间:2016-01-05 19:29:38

标签: javascript database parse-platform

我的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);

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()来调用它。