2

我刚刚开始研究流星,但我一直在尝试更新记录中的数组中的记录。假设我有一个看起来像这样的文档:

Users:
{ 
  _id: "somerandom",
  name: "name1",
  items, [
    {
      name: "item1",
      data: "somedata",
      ...
    },
    {
      name: "item2",
      data: "somedata",
      ...
    }
  ],
  ...
},
...

我想更新项目“item1”的数据。我在流星中找不到任何关于如何做到这一点的信息,但从我读过的关于 MongoDB 的内容来看,我认为正确的方法是

Users.update({_id: userId, "items.name": 'item1}, {$set: {"items.$.data": newData}});

但由于 Meteor 中使用的 MongoDB 不支持 $ 它不会工作,另一方面我可能是如何做到这一点的方式。

有人对此有解决方案吗?

4

2 回答 2

2

在服务器端使用Meteor.methods()和实现您的数据库操作,并Meteor.call()从客户端调用它。Meteor 中尚未实现此功能,此处记录了它。

您可以在此处阅读有关 Github 上提出的此问题的讨论的更多信息。

于 2013-03-11T18:02:13.503 回答
1

我在流星的 github https://github.com/meteor/meteor/blob/master/examples/parties/model.js找到了一种解决方法

这个想法是首先获取要更改的数组项的索引,然后使用该索引而不是 $。所以在这种情况下,它会像

user = Users.findOne(userId);
index = _.indexOf(_.pluck(user.items, 'name'), 'item1');

modifier = {$set: {}};
modifier.$set["items." + index + ".data"] = newData;
Users.update(userId, modifier);
于 2013-03-12T07:41:44.790 回答