meteor不会更新mongodb中的数据

时间:2012-12-25 08:22:45

标签: javascript node.js meteor

我有这段代码:

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控制台中手动编写按预期工作。

是否存在问题,因为我不想更新子阵列? 我究竟做错了什么?谢谢你的帮助

1 个答案:

答案 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:当我开始使用我的应用程序时,我遇到了同样的问题。