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