使用 $and 查询后,结果不会在 DOM 上呈现

after using $and query, the results aren't render on DOM

我正在用 meteor 构建一些小的日志报告。

有一个非常简单的 table,它应该包含从外部 mongodb 服务器接收到的所有数据。

html:

 <tbody>
  {{#each impressions}}
  <tr>
    {{> impression}}
  </tr>
  {{/each}}
</tbody>

js :

Meteor.subscribe('impressions');
...
...
Template.logResults.helpers({
'impressions': function() {
var sTs = Router.current().params.fromTs;
var eTs = Router.current().params.toTs;
return Impressions.find({});
}
});

到目前为止,还不错。但是,当我将查询更改为这个查询时:

Impressions.find({
  $and: [{
    ts: {
      $gte: sTs
    }
  }, {
    ts: {
      $lte: eTs
    }
  }]
});

结果未显示在 HTML DOM 上, 我试着调试它,并创建了这个确切查询的 console.log, 令人惊讶的是,所有正确的结果 return 成功地发送到控制台。

附上截图。 我可能做错了什么,也许 publish/subscribe 事情。

帮助某人?

谢谢。 P.S。我删除了不安全和自动发布, 在服务器文件夹中有此代码

Meteor.publish('impressions', function() {
  return Impressions.find();
});

此代码位于主 lib 文件夹中

Impressions = new Mongo.Collection("banners");

enter image description here

路由器将当前路由的参数存储为字符串(这是有道理的,因为 URL 是字符串),因此您需要在查询数据库之前将值显式转换为整数。试试这样的东西:

var sTs = Number(Router.current().params.fromTs);
var eTs = Number(Router.current().params.toTs);

备注:

    根据输入的性质,
  1. parseIntparseFloat 可能是更好的选择。有关详细信息,请参阅 this question
  2. 您可以在路由器本身中进行类型转换,并将数据上下文中的值传递给助手。请参阅 iron router 指南的 this section
  3. 我怀疑当您将它输入控制台时它起作用了,因为您使用的是数字而不是字符串。例如。 ts: {$gte: 123} 而不是 ts: {$gte: '123'}.