更新数组中的记录

时间:2013-03-11 09:11:34

标签: mongodb meteor

我刚刚开始关注流星,而我却试图更新记录中阵列中的记录。假设我有一个类似这样的文档:

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并不支持$它不会起作用,另一方面我可能会知道如何做到这一点。

有人有解决方案吗?

2 个答案:

答案 0 :(得分:2)

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

您可以在Github上提出的关于此问题的讨论中阅读更多内容,here

答案 1 :(得分:1)

我在meteor的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);