我有一个像这样的json,
[
{
team: 'Hello',
members: ['John', 'Paul'],
points: 0;
},
{
team: 'Bye',
members: ['John', 'Mary'],
points: 0;
}
]
我如何搜索所有团队,找到任何一个名为' John'并为匹配的每个团队增加10分?
实际上它是一个Mongo集合,我使用var teams = Teams.find().fetch()
将它变成json,如果我不这样做并尝试在集合级别进行匹配,以便我可以编辑它?
答案 0 :(得分:0)
如果要在服务器上运行更新操作,可以使用$in
运算符查找指定值与数组元素匹配的文档。
服务器强>
if (Meteor.isServer) {
Teams.update({
"members": {
$in: ["John"]
}
}, {
$inc: {
points: 10
}
}, {
multi: true
});
}
如果您想在客户端上运行此功能,则只能使用_id
字段更新文档,否则您将收到此错误:
错误:不允许。不受信任的代码只能按ID更新文档。 [403]
因此,您需要运行cursor.forEach()
方法,然后更新所有匹配的文档。
<强>客户端:强>
if (Meteor.isClient) {
Teams.find({
"members": {
$in: ["John"]
}
}).forEach(function(doc) {
Teams.update({
_id: doc._id
}, {
$inc: {
points: 10
}
});
});
}