【问题标题】:Update records within arrays更新数组中的记录
【发布时间】:2013-03-11 09:11:34
【问题描述】:

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

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 不支持 $ 它不会工作,另一方面,我可能是如何做到这一点的方式。

有人对此有解决方案吗?

【问题讨论】:

    标签: mongodb meteor


    【解决方案1】:

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

    您可以在 Github 上关于此问题的讨论中阅读更多信息,here

    【讨论】:

    • 我不太明白。那么我可以在服务器端使用 $ 选择器吗?
    • 是的。这是根据讨论建议的解决方法,或者您在下面建议的内容也很干净。
    • 我可以确认 Prashant 所说的话。如果我在服务器方法中执行此操作,但在客户端中没有,则可以正常工作。糟透了,最好在客户端做。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-18
      • 1970-01-01
      • 2012-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多