使用 $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);
注意事项:
parseInt
或 parseFloat
可能是更好的选择,具体取决于您输入的性质。有关详细信息,请参阅this question。
您可以在路由器本身中进行类型转换,并将数据上下文中的值传递给助手。请参阅 Iron 路由器指南的this section。
我怀疑当您在控制台中键入它时它会起作用,因为您使用的是数字而不是字符串。例如。 ts: $gte: 123
而不是 ts: $gte: '123'
。
【讨论】:
以上是关于使用 $and 查询后,结果不会在 DOM 上呈现的主要内容,如果未能解决你的问题,请参考以下文章
AngularJS再次加载初始内容后无法在DOM上使用JQuery