从服务器更新的 meteor 集合,不会在客户端上被动排序



在我的 meteor 项目中,我有一个集合,我在其中放置了一些日志,我想在客户端上显示来自服务器的最新添加日志,始终在列表中排在第一位。

我的日志收集在 autorun 中订阅,以控制按限制加载的日志数量:

Template.statistics.onCreated(function(){
 instance.autorun(function () {
         var instance = this;
        instance.limitLogs = new ReactiveVar(20);
        instance.loadedLogs = new ReactiveVar(0);

        var limitLogs = instance.limitLogs.get();
        var subscriptionLogs = instance.subscribe("logs_list",limitLogs);

        // if subscription is ready, set limit to newLimit
        if (subscriptionLogs.ready()) {
            instance.loadedLogs.set(limitLogs);
        } else {
            console.log("> Subscription logs is not ready yet. nn");
        }
    });
    instance.getLogsList = function(){
        return logsList.find();
    };
});
Template.statistics.helpers({
     hasMoreLogs: function () {
     return Template.instance().getLogsList().count() >= Template.instance().limitLogs.get();
    } ,
    logs : function(){
           return Template.instance().getLogsList();
    }
});

在服务器上,我有:

 Meteor.publish("logs_list",function(limit) {
        return  logsList.find({},{sort: {createdAt: -1}},{limit: limit});
    });

在我的collection.js lib文件夹中,我有:

logsList = new Mongo.Collection('logsList');

所以我有一些服务器代码作为作业运行,JobCollection,从这个服务器方法,我调用另一个在日志中插入数据的服务器方法:

Meteor.Methods({
 logTask : function(taskId,message,status){
            logsList.insert({
                    jobID : taskId,
                    message : message,
                    status : status,
                    createdAt : new Date()
                }
            );
        } 
});
//... somewhere in job worker
  Meteor.call("logTask", job._doc._id, "something", "failed");

每当我使用logTask服务器方法从该作业工作者插入日志时,我都会在日志表中看到客户端上的一个新条目,但它没有按createdAt排序,Hovewer 如果我更新页面,我会看到日志收集按预期排序。

这样:

页面重新加载之前:

message1    Wed Feb 24 2016 07:30:52 GMT+0200
message2    Wed Feb 24 2016 07:36:52 GMT+0200

页面重新加载后:

message2    Wed Feb 24 2016 07:36:52 GMT+0200
message1    Wed Feb 24 2016 07:30:52 GMT+0200

插入后是否应以某种方式聚合集合以使其在客户端上重新排序?

还需要在客户端上使用{},{sort: {createdAt: -1}}

instance.getLogsList = function(){
    return logsList.find({},{sort: {createdAt: -1}});
};

我认为,由于客户端已经拥有数据并且新数据已从服务器修补到客户端,因此在刷新之前会以这种方式对其进行排序。

最新更新