我有这个代码:
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 控制台中手写可以正常工作。
是否因为我不想更新子数组而出现问题? 我究竟做错了什么?谢谢你的帮助
最佳答案
这是因为您的数据使用了 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:我在启动我的应用程序时遇到了同样的问题。
关于javascript - meteor 不会更新 mongodb 中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14028941/