javascript - 通过 Meteor 将新对象添加到 Mongo 文档中的数组中

标签 javascript mongodb meteor

我正在 Meteor 中编写一个小的规划扑克工具;第一次使用 Meteor 和 json 文档存储。我有一个用户故事的集合,以及分配给该故事的用户以及这些用户的评分。

最初我会做一些像这样的插入:

Stories.insert({'story': stories[i], 'assignees': users, 'ratings': []});

...其中一个条目可能如下所示:

{
  'story': 'some story',
  'assignees': ['Bob', 'Joe'],
  'ratings': []
}

然后,一旦用户输入了对该故事的评分,它应该更新为如下所示:

{
  'story': 'some story',
  'assignees': ['Bob', 'Joe'],
  'ratings': [{'Bob': 2}, {'Joe': 5}] // maybe a better way to do this?
}

我在写行来实现这一点时遇到了困难。我现在拥有的是:

var users = ['Bob', 'Joe'];
for (var i = 0; i < users.length; i++) {
  var user = users[i];
  var rating = {user: 1};
  Stories.update({}, {$push: {'ratings': rating}});
}

不幸的是,结果是这样的:

{
  'story': 'some story',
  'assignees': ['Bob', 'Joe'],
  'ratings': [{user: 1}]
}

也就是说,在 ratings 数组中只有一个对象,甚至没有正确的键(普通的 user 而不是 Bob 之类的东西)。这可能与 JS 提升和对象实例化的棘手有关。任何见解都值得赞赏。

最佳答案

您的问题是您尝试使用变量作为对象的“键”,但这种方式不起作用。使用括号 [] 表示法来动态分配“key”,如下所示:

var users = ['Bob', 'Joe'];
for (var i = 0; i < users.length; i++) {
  var user = users[i];
  var rating = {};
  rating[user] = 1;
  Stories.update({}, {$push: {'ratings': rating}});
}

实际上,您甚至可以通过一次更新来做得更好:

var users = ['Bob', 'Joe'];
var ratings = [];
for (var i = 0; i < users.length; i++) {
  var user = users[i];
  var rating = {};
  rating[user] = 1;
  ratings.push( rating);
}

Stories.update({}, {$push: {'ratings': { $each: ratings } }});

所以 $each修饰符允许您将新文档的“数组”推送到现有数组上,这意味着网络上的更新更少。

不确定您在哪里执行此操作,因此使用 minimongo 的浏览器客户端可能无法使用第二个选择。但可以从服务器以这种方式调用它。

关于javascript - 通过 Meteor 将新对象添加到 Mongo 文档中的数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23880054/

相关文章:

javascript - 在 JavaScript 中格式化 Json、删除重复项和计数元素

javascript - 通过javascript在弹出图像上添加下一个和上一个

node.js - 删除 Mongoose 中引用的文档

mongodb - 管理员用户无法登录到 mongodb 上的其他数据库

meteor 电子邮件不起作用 - 错误 : getaddrinfo ENOTFOUND

javascript - JavaScript 中按钮 onClick() 函数未第二次执行

javascript - 如果数组中不存在对象 Prop 则更新

javascript - 取消绑定(bind) Meteor 中的关键事件?

android - 强制重新启动完整的应用程序以刷新 Cordova 中的包

javascript - JQuery 回调工作