我有这段代码:
Nodes = new Meteor.Collection("nodes");
[...]
Template.list.events({
'click .toggle': function () {
Session.set("selected_machine", this._id);
Nodes.update(Session.get("selected_machine"), {$set: {"conf" :{"flag": true }}});
}
});
我无法说服meteor更新我的参赛作品。这是一个微秒的闪光 在DOM中,但服务器拒绝更新。
这是我的数据: {“_ id”:ObjectId(“50d8ec4f5919ffef343c9151”),“conf”:{“flag”:false},“name”:“sepp”}
的console.log(Session.get( “selected_machine”));告诉我身份证。安装了不安全的软件包。在minimongo控制台中手动编写按预期工作。
是否存在问题,因为我不想更新子阵列? 我究竟做错了什么?谢谢你的帮助
答案 0 :(得分:3)
这是因为您的数据使用MongoDB ObjectId,这是Meteor无法更新这些值的已知问题(https://github.com/meteor/meteor/issues/61)。
你可以在mongo shell(meteor mongo)中运行这个hack来修复它(归功于antoviaque,我只是为你的收藏编辑了它)
db.nodes.find({}).forEach(function(el){
db.nodes.remove({_id:el._id});
el._id = el._id.toString();
db.nodes.insert(el);
});
Meteor将ObjectId视为字符串,因为MongoDB没有找到要更新的内容。 它在客户端工作,因为在本地集合中,这些_id被转换为字符串。
对于实验,您应该通过浏览器控制台而不是通过mongo shell插入数据,因为Meteor会为您生成UUID,一切都会(并且将会)正常。
PS:当我开始使用我的应用程序时,我遇到了同样的问题。