2015-08-31 28 views
-2

我有一个JSON说是这样的,查找/编辑嵌套json中的所有匹配?

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

我如何去寻找所有的球队找到任何有一个成员称为“约翰”,并加10分给每个匹配的球队吗?

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

+5

这是吨的帮助一个相当基本的问题蒙哥网上。你试过什么了? –

+0

我试过在循环内找到合适的团队成员,但现在我遇到了问题,试图更新它。'Teams.update(myTeam,{$ inc:{'members.o.1':Number(score)}});' o应该是一个添加的动态数字。 –

回答

0

如果要在服务器上运行更新操作,可以使用$in运算符来查找指定值与数组元素匹配的文档。

服务器:

if (Meteor.isServer) { 
    Teams.update({ 
     "members": { 
      $in: ["John"] 
     } 
    }, { 
     $inc: { 
      points: 10 
     } 
    }, { 
     multi: true 
    }); 
} 

如果你想在客户端上运行此,您只能更新通过使用_id领域的文件,否则您将收到此错误:

Error: Not permitted. Untrusted code may only update documents by ID. [403]

因此,您需要运行cursor.forEach()方法并随后更新所有匹配的文档。

客户:

if (Meteor.isClient) { 
    Teams.find({ 
     "members": { 
      $in: ["John"] 
     } 
    }).forEach(function(doc) { 
     Teams.update({ 
      _id: doc._id 
     }, { 
      $inc: { 
       points: 10 
      } 
     }); 
    }); 
}