在浏览器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解决问题?
答案 0 :(得分:2)
确保将MongoDB配置为使用oplog并设置环境变量,如下所述:
http://meteorhacks.com/lets-scale-meteor.html
由于智能集合删除了定期数据库轮询,因此您需要使用支持oplog的mongodb实例来识别来自外部流星的数据库更改。