查找/编辑嵌套json中的所有匹配项?

时间:2015-08-31 16:36:29

标签: json mongodb meteor

我有一个像这样的json,

[
  {
    team: 'Hello',
    members: ['John', 'Paul'],
    points: 0;
  },
  {
    team: 'Bye',
    members: ['John', 'Mary'],
    points: 0;
  }
]

我如何搜索所有团队,找到任何一个名为' John'并为匹配的每个团队增加10分?

实际上它是一个Mongo集合,我使用var teams = Teams.find().fetch()将它变成json,如果我不这样做并尝试在集合级别进行匹配,以便我可以编辑它?

1 个答案:

答案 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
            }
        });
    });
}