javascript - meteor 不会更新 mongodb 中的数据

标签 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 控制台中手写可以正常工作。

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

最佳答案

这是因为您的数据使用了 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/

相关文章:

javascript - 无法使用 promise.all() 获得 promise 结果

javascript - Objection.js 未正确返回

javascript - MongoDB 数组从 10 中匹配 6

javascript - 如何打破 io 套接字中的 setinterval - Nodejs

node.js - NestJs:无法执行命令:npm install --silent

javascript - meteor .js/MongoDB : finding a document's place in a collection

JQuery 动画和 Meteor

javascript - 变量范围(module.exports + socket.io 设置)

javascript - Firebase-为提供者设置自定义参数意味着什么?

javascript - Redis Javascript 异步函数