3

我有这个代码:

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 }}});
  }
});

我无法说服流星更新我的条目。DOM 中有微秒闪烁,但服务器拒绝更新。

这是我的数据: { "_id" : ObjectId("50d8ec4f5919ffef343c9151"), "conf" : { "flag" : false }, "name" : "sepp" }

console.log(Session.get("selected_machine")); 给我看身份证。安装了不安全的软件包。在 minimongo 控制台中手写按预期工作。

是否因为我不想更新子数组而出现问题?我究竟做错了什么?谢谢你的帮助

4

1 回答 1

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

于 2012-12-25T10:29:14.520 回答