1

我有一个看起来像这样的对象:

{articleId:"1"
 promotions:[{promoterId:"2"
              viewerIps:['3', '4', '5']},
              {promoterId:"6"
              viewerIps:['7', '8', '9']}]}

基本上,我想跟踪有多少人(及其 IP)根据他们共享的用户特定链接查看某些文章。

如果某人是第一个查看该发起人的特定文章的人,我可以像这样推送到促销数组:

Views.update({articleId:articleId}, {$push: {promotions:{promoterId:promoterId,
viewerIps:[viewerIp]}}});

但是假设我想要推送到特定的 viewerIps 数组——特定于 articleId 和promoterId。我怎样才能做到这一点?

谢谢

4

2 回答 2

1

你可以使用.符号

Views.update({articleId:articleId}, 
   {
      $push: {"promotions.0.viewerIps"  :viewerIp}
   },
      $set:  {"promotions.0.promoterId":promoterId}
});

那里的数字0来自您要更改的数组中的索引位置。您可以使用位置运算符$查询要更改的数组。我使用上面的数字代替的原因$$流星还没有完全支持。

如果您愿意,您只能在服务器上使用它。有一个关于这个的开放 github 票

于 2013-08-30T05:43:55.093 回答
0

我喜欢流星的一个方面是你可以在任何地方使用 javascript/coffeescript 。我谦虚地建议您将该策略扩展到您对 mongo 更新的使用。我发现自己只是直接使用我的 json/object 操作能力并 $set 整个事情,而不是学习另一种语法。有人会说,在证明它会产生影响之前限制您检索的字段是过早的优化,因此您可能无论如何都要检索数据。

概括地说,有时移动巨大的数据结构可能会很可怕,但如果你遇到了这个问题,那么为每个发起人创建一个新文档可能是你无论如何都应该做的。特别是正如我的直觉所说,我可能想要比发起人 ID 和观众 IP 更多的信息。

于 2013-08-30T09:24:04.933 回答