【发布时间】:2016-02-24 14:41:37
【问题描述】:
在我的流星项目中,我有一个集合,我在其中放置了一些日志,并且我想在客户端上显示来自服务器的最新添加的日志,总是在列表中的第一位。
我的日志集合订阅在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. \n\n");
}
});
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 排序,但是如果我更新页面,我看到日志集合按预期排序。
像这样:
页面重新加载之前:
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
是否应该在插入后以某种方式聚合集合以使其在客户端重新排序?
【问题讨论】:
标签: javascript node.js mongodb meteor