我刚刚开始关注流星,而我却试图更新记录中阵列中的记录。假设我有一个类似这样的文档:
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并不支持$它不会起作用,另一方面我可能会知道如何做到这一点。
有人有解决方案吗?
答案 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);