我正在使用d3将带有x和y坐标的流星集合(Hostiles)绘制到图像上。我能成功地做到这一点。但是,我有一个发布功能,可以检查用户登录是管理员还是普通用户。如果用户是管理员,则使用d3绘制所有点,但是当它是任何其他用户时,它仅绘制特定于用户位置的点。
//Base Publish on User Type
if (user === true) {
//Admin Return all Points
return Hostiles.find();
} else {
//Any other user returns location specific points
return Hostiles.find({latitude: {$lte: xLoc + 80, $gte: xLoc - 80}, longitude: {$lte: yLoc + 80, $gte: yLoc - 80}});
};
所有这一切都很好。当我更改xLoc
位置的yLoc
和Hostile
时,会出现此问题。管理员登录后,重新绘制会立即显示集合中的更改。但是,当普通用户登录时,重绘会有滞后现象。这个d3重绘通常需要大约3-10秒。在客户端,我有我的订阅和d3在Meteor.autorun(function() {
中绘制。也许没有办法解决这个问题?感谢。
答案 0 :(得分:1)
“MongoDB的oplog的当前实现仅支持对标量字段的相等性检查。所有其他操作(如你的lte / gte检查)仍然使用旧的10秒poll / diff方法。这将在1.0之前改变,因为Meteor团队在oplog实现中增加了更多运算符。“ - @ Cuberto https://www.meteor.com/blog/2013/12/17/meteor-070-scalable-database-queries-using-mongodb-oplog-instead-of-poll-and-diff
然而,有一个解决方案是未发布的devel分支。见https://github.com/meteor/meteor/wiki/Oplog-Observe-Driver。这允许使用Minimongo支持的任何选择器,不包含$ where或$ near。只需使用meteor --release oplog-with-operators
即可。
感谢@Cuberto和@alanning提供了出色的解决方案。