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

Posted

技术标签:

【中文标题】使用 $and 查询后,结果不会在 DOM 上呈现【英文标题】:after using $and query, the results aren't render on DOM 【发布时间】:2016-02-17 19:34:08 【问题描述】:

我正在使用流星构建一些小日志报告。

有一个简单的表,它应该包含从外部 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, 令人惊讶的是,所有正确的结果都成功返回到控制台。

附上截图。 我可能做错了什么,可能是发布/订阅的事情。

帮助别人?

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

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

这个代码在主 lib 文件夹中

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

enter image description here

【问题讨论】:

并且还尝试使用 .fetch();但它返回空数组。 我的直觉是这是一个字符串到整数的转换问题。 ets 和 sts 应该是数字吗? 是的,他们应该...编辑:OMG wooot?!首先,非常感谢!第二,你有很好的预感,第三,为什么结果在控制台上返回,而不是在 HTML 上? 我不玩手机的时候会写一个更完整的答案。 注意$and:是默认的,你可以简单的写成Impressions.find( ts: $gte: sTs , ts: $lte: eTs );你通常只需要结合$or:调用$and: 【参考方案1】:

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

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

注意事项:

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

【讨论】:

以上是关于使用 $and 查询后,结果不会在 DOM 上呈现的主要内容,如果未能解决你的问题,请参考以下文章

React页面不会在url查询更改时重新呈现

React 页面不会在 url 查询更改时重新呈现

关于lucence分词后查询的问题

AngularJS再次加载初始内容后无法在DOM上使用JQuery

在 Cycle.js 中呈现所有 dom 后运行 js 代码

加载所有javascript后如何输出DOM?