Meteor SmartCollection给出不一致的结果

时间:2013-11-23 06:47:56

标签: javascript mongodb meteor smartcollection

在浏览器JS控制台上,News.insert({name: 'Test'})导致{{count}}0增加到1

在mongo控制台mrt mongo中,db.news.find().count()返回1。但是,通过mongo控制台db.news.insert({name: 'TestAgain'})添加记录后,{{count}}保留在1,而在mongo中,现在有2个记录。

问题:是什么原因导致minimongo和mongodb控制台产生不一致的结果?

如果我将Meteor.SmartCollection替换为Meteor.Collection并重新加载页面,则{{count}现在为2。但如果我要将其更改回Meteor.SmartCollection,则{{count}}会返回1 !!

集合/ news.js

News = new Meteor.SmartCollection('news');

客户端/视图/ main.html中

<template name="news">
    {{ count }}
</template>

客户端/视图/ main.js

Template.news.count = function() {
    return News.find().count();
}

将Meteor v6.6.3与SmartCollection v0.3.2.2一起使用


更新

根据Cuberto的建议,我在Mongodb服务器上启用了Oplog。

export MONGO_URL=mongodb://192.168.1.111:27017/myDb
export OPLOG_URL=mongodb://192.168.1.111:27017/local
mrt

mongod--replSet meteor一起运行,mongodb配置了

var config = {_id: "meteor", members: [{_id: 0, host: "127.0.0.1:27017"}]}
rs.initiate(config)

mongo中的提示也变为meteor:PRIMARY>db.local.确实包含集合oplog.rs

启动meteor,我们在控制台SmartCollection charged with MongoDB Oplog中看到。

问题:但是,当我们尝试在浏览器JS控制台中执行News.find()时,没有检索到任何内容。在mongo客户端中执行相同的查询会返回正确的结果。从Meteor.SmartCollection切换回Meteor.Collection可让网站重新投放使用。

我们如何使用SmartCollection解决问题?

1 个答案:

答案 0 :(得分:2)

确保将MongoDB配置为使用oplog并设置环境变量,如下所述:

http://meteorhacks.com/lets-scale-meteor.html

由于智能集合删除了定期数据库轮询,因此您需要使用支持oplog的mongodb实例来识别来自外部流星的数据库更改。