【问题标题】:Get latest record per field in Parse.com JS query获取 Parse.com JS 查询中每个字段的最新记录
【发布时间】:2016-01-06 04:50:09
【问题描述】:

我的 Parse 数据库中有一个表,其中包含 validFrom 和 uniqueId 列。可以有多个具有相同 uniqueId(如名称)的记录

对于给定的一组唯一 ID,我必须使用什么查询来获取具有最新 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);

【问题讨论】:

  • “每个 unique_id 记录 1 项”是什么意思?
  • 即只有每个uniqueId记录的最新记录
  • 基本上就像说我想要具有特定唯一ID的每条记录的最新值,然后过滤特定数量的唯一ID
  • "unique" 意味着给定的 uniqueId 只对应一个对象,是这样吗?
  • 好的。这可以通过一个查询来完成,但是一个查询比您想要的多。它将需要应用程序逻辑来减少结果。这是一个很好的云功能应用程序。我应该推荐一个吗?

标签: javascript database parse-platform


【解决方案1】:

查询语义是有限的,因此唯一的方法是查询超集并将结果操作为您需要的。这最好在服务器上完成,以限制额外对象的传输。

大警告:这是用铅笔和纸做的,而不是正在运行的 parse.app,所以它可能是错误的。但最重要的想法是获取所有 uniqueId 的所有匹配对象,按 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()调用它。

【讨论】:

  • 啊,我能得到的初始设置有限制吗?我开始认为也许我应该创建一个新表,该表始终存储与每个唯一 ID 关联的最新记录,并在有更新时替换该表中的值...
  • 这不是一个坏主意。查询的默认限制是 100。它可以增加到最大 1k
  • 是的,我想我会创建一个指向最新更新的新表,并使用云代码功能进行更新。我不知道云代码功能!谢谢。我会标记你的答案。继续关注有关云代码的更多问题!哈哈
猜你喜欢
  • 2021-01-10
  • 1970-01-01
  • 2016-01-29
  • 2020-07-29
  • 1970-01-01
  • 1970-01-01
  • 2021-08-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多